36-SQLServer中如何找出哪個用戶刪除了某表


一、總結

1、當沒有部署觸發器和開啟審計的情況,想知道某張表是被哪個用戶刪除的,可以使用系統函數fn_dblog結合系統的默認跟蹤找到;

2、需要注意的是系統默認提供5個跟蹤文件,默認大小都是20MB,當實例重啟的時候或者達到最大值的時候,會重新生成新的文件,

     將最早的跟蹤文件刪除,依次滾動更新,所以刪除表后間隔的時間太長,也是找不到結果的;

3、fn_dblog函數簡介

  * 使用fn_dblog函數我們可以查看當前數據庫的事物日志文件的記錄(活動的日志,備份走的日志用該函數查不到);

       * 官方並未公開此函數的用法,在生產環境,慎用此命令!!!;

  * 2個參數:

    參數1:日志開始序列號位置(LSN),輸入NULL,表示從日志開始位置返回結果;

    參數2:日志結束序列號位置(LSN),輸入NULL,表示查找到日志最后的結束位置;

4、通過sys.fn_dblog最后定位到的結果,只能顯示object_id,找不到具體的表名,如果有多個用戶做了大量的drop操作時,

     找出的結果也非常多,可能得不到想要的結果;

5、如果在刪除表時,用戶指定了事物名稱,在使用sys.fndblog查找結果的時候,[Transaction Name]的值必須使用用戶指定的事物名稱才能出結果;

 

 

 6、如果在刪除表時,用戶手動開啟了事物,但是並沒有指定事物名稱,在使用sys.fndblog查找結果的時候,[Transaction Name]的值要使用user_transaction才能有結果;

 

 

 

 

二、操作步驟

1、准備測試數據

use test
go
create table student (id int,name nvarchar(20))
go

insert into student values(1,'jack')
insert into student values(2,'rose')

select * from student

 2、查看student表的object_id(看和一會找出來的是否一致)

 命令:select * from test.sys.objects where name='student'

 3、創建一個具有test庫dba權限的用戶dbinfo

4、使用dbinfo用戶登錄數據庫刪除student表

 

 5、使用系統函數sys.fn_dblog找出相關信息

use test

go

select [Transaction ID],[Transaction Name],[Begin Time],[Server UID],SPID

from sys.fn_dblog(NULL,null)

where [Transaction Name]='DROPOBJ'

go

 6、根據事物ID,找出被刪除的對象

select  [Lock Information] from sys.fn_dblog(NULL,NULL)

where [Lock Information] like '%SCH_M OBJECT%' and [Transaction ID]='0000:00000d8e'

go

  結果:HoBt 0:ACQUIRE_LOCK_SCH_M OBJECT: 7:597577167:0 

 結果中OBJECT后面的信息就是刪除的對象的信息:

7---->代表DB_ID

597577167------>代表object_id,也就是被刪除對象的object_id(發現和上面我們刪除之前查詢的object_id一致, 顯然現在通過這個object_id已經查不到結果了,因為已經刪除了)

7、找出SQLServer中默認的trace的path路徑

命令:select * from sys.traces where is_default =1 

 8、根據trace path,事務ID、object_id、開始時間、SPID等信息找到對應的trace信息

select  DatabaseID,NTUserName,HostName,ApplicationName,LoginName,

          SPID,ObjectID,StartTime, EventClass,EventSubClass

from  sys.fn_trace_gettable('C:\Program Files\MicrosoftSQLServer\MSSQL12.MSSQLSERVER\MSSQL\Log\log_148.trc',1)

where SPID = 61

         and  StartTime >= '2020/07/23 11:00:15:780' 

         and ObjectID = '597577167'

go

 

參考網址:

 https://www.cnblogs.com/Joe-T/p/3191416.html

 

 

 

***************************************************

如下是個人開發系統,歡迎大家體驗,純屬個人愛好,想一塊玩的,私信。

易本浪賬:www.jialany.com  

***************************************************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM