Sql-Server-2005

如何找出哪個主機/IP地址/程序執行了刪除?

  • February 23, 2017

我們使用的是 SQL Server 2005。在我們的數據庫中,一些行被刪除;如何找到系統(主機名/IP 地址)、程序以及刪除日期和時間?

事後您將無法找到此資訊。您需要添加觸發器和日誌記錄表(或設置昂貴的伺服器端跟踪,或將手動日誌記錄添加到您的數據訪問方法)。

這是一個關於如何實現日誌表和触發器的非常簡單的範例:

CREATE TABLE dbo.TableNameDeleteLog
( 
 PK_From_TableName INT,
 Program NVARCHAR(128),
 Host NVARCHAR(128),
 IP VARCHAR(48),
 When DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
GO

CREATE TRIGGER dbo.LogDelete_TableName
ON dbo.TableName
FOR DELETE
AS
BEGIN
 SET NOCOUNT ON;

 DECLARE @p NVARCHAR(128), @h NVARCHAR(128), @i VARCHAR(48);

 SELECT @p = s.host_name, @h = host_name, @i = c.client_net_address
   FROM sys.dm_exec_sessions AS s
   INNER JOIN sys.dm_exec_connections AS c
   ON s.session_id = c.session_id
   WHERE s.session_id = @@SPID;

 INSERT dbo.TableNameDeleteLog(PK_From_TableName, Program, Host, IP)
   SELECT PK_Column, @p, @h, @i
   FROM deleted;
END
GO

SQL Server 不儲存該資訊。如果您有備份,包括事務日誌文件,您可以通過恢復和搜尋那些失去的記錄來查明刪除發生的時間。

您只能找到您在其他地方記錄的主機名/IP/程序。您的事件日誌、SQL 日誌或其他地方可能有關於一般活動的跟踪,但沒有儲存特定日誌(不要與事務日誌記錄混淆)用於記錄刪除。

引用自:https://dba.stackexchange.com/questions/21879