如何找出哪个主机/IP地址/程序执行了删除?

Edw*_*ard 7 sql-server-2005 sql-server-2008-r2

我们使用的是 SQL Server 2005。在我们的数据库中,一些行被删除;如何找到系统(主机名/IP 地址)、程序以及删除日期和时间?

Aar*_*and 5

事后您将无法找到此信息。您需要添加触发器和日志记录表(或设置昂贵的服务器端跟踪,或向数据访问方法添加手动日志记录)。

这是一个非常快速的示例,说明如何实现日志记录表和触发器:

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
Run Code Online (Sandbox Code Playgroud)


Mar*_*sen 3

SQL Server 不存储该信息。如果您有备份(包括事务日志文件),则可以通过恢复和搜索那些丢失的记录来查明删除发生的时间。

您只能找到已在其他地方记录的主机名/IP/程序。您的事件日志、SQL 日志或其他位置中可能存在有关一般活动的痕迹,但不会存储用于删除记录的特定日志(不要与事务日志记录混淆)。