2017-06-14 79 views
0

總是需要找出詳細信息,有意或有人在以下任何SQL Server數據庫對象上執行DROP/DELETE命令。如何確定誰在Sql Server數據庫對象上執行DROP/DELETE?

  1. 跌落 - 表從數據庫
  2. 下跌 - 從數據庫
  3. 刪除存儲過程 - 從數據庫表

Q.行是否有可用的TSQL找誰執行數據庫用戶DELETE/DROP?

Q.用戶需要什麼樣的權限才能找到這些詳細信息?

+1

DDL語句可以在找到默認跟蹤一小段時間。如果你想要更多的控制,你需要創建數據庫觸發器。行刪除沒有被跟蹤。爲此,您需要創建一個刪除觸發器。這個問題很可能因爲過於寬泛而關閉。 –

+0

好,這裏的目的是跟蹤數據庫對象的這種操作,比如說:有人丟棄了一個存儲過程,我們想知道是誰做的。 –

+2

你可以看一下[SQL Server Audit](https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine),但是這個在審計到位之前,不會給你提供信息。另外請記住,指責別人不會有幫助。請注意適當的備份策略和災難恢復計劃,並確保服務器/數據庫的權限不會太寬。 – Pred

回答

1

您是否檢查過? 右鍵點擊數據庫。 轉到如圖圖像: sql server

解決方案2: 此查詢給出了很多有用的信息對數據庫(根據需要應用過濾器):

DECLARE @filename VARCHAR(255) 
SELECT @FileName = SUBSTRING(path, 0, LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc' 
FROM sys.traces 
WHERE is_default = 1; 

SELECT gt.HostName, 
     gt.ApplicationName, 
     gt.NTUserName, 
     gt.NTDomainName, 
     gt.LoginName, 
     --gt.SPID, 
     -- gt.EventClass, 
     te.Name AS EventName, 
     --gt.EventSubClass,  
     -- gt.TEXTData, 
     gt.StartTime, 
     gt.EndTime, 
     gt.ObjectName, 
     gt.DatabaseName, 
     gt.FileName, 
     gt.IsSystem 
FROM [fn_trace_gettable](@filename, DEFAULT) gt 
JOIN sys.trace_events te ON gt.EventClass = te.trace_event_id 
WHERE EventClass in (164) --AND gt.EventSubClass = 2 
ORDER BY StartTime DESC; 
相關問題