1

每天,我的一些数据库行都会被自动删除。

甚至日志文件也被删除了,所以我无法检查谁删除了这些文件。

我不明白该怎么做。

4

2 回答 2

2

如果 SQL 服务器是预生产的,您可以将所有删除权限拉到目标表中,然后等着看谁在抱怨。如果无论如何都不允许在此表上删除,即使在生产中也是如此,那么限制该功能向前发展将是一个好主意。

除此之外,尝试向表中添加删除触发器以进行审计。您可以获取源 IP 地址、登录用户信息等。如果需要,您甚至可以回滚删除。

这是一篇关于使用触发器进行审计的好文章。

http://weblogs.asp.net/jgalloway/archive/2008/01/27/adding-simple-trigger-based-auditing-to-your-sql-server-database.aspx

编辑:

如果要停止对表的所有删除,可以使用以下触发器。

CREATE TRIGGER dbo.MyTable_Delete_Instead_Of_Trigger
ON dbo.MyTable
INSTEAD OF DELETE
AS
BEGIN

     raiserror('Deletes are not allowed.', 16, 1)
END
于 2012-12-09T15:46:21.770 回答
1

对捕获所有 RPC Completed 和 SQL BatchCompleted 事件的数据库运行 SQL Profiler 并查看它以查找执行删除的任何内容。

于 2012-12-09T16:28:04.130 回答