每天,我的一些数据库行都会被自动删除。
甚至日志文件也被删除了,所以我无法检查谁删除了这些文件。
我不明白该怎么做。
如果 SQL 服务器是预生产的,您可以将所有删除权限拉到目标表中,然后等着看谁在抱怨。如果无论如何都不允许在此表上删除,即使在生产中也是如此,那么限制该功能向前发展将是一个好主意。
除此之外,尝试向表中添加删除触发器以进行审计。您可以获取源 IP 地址、登录用户信息等。如果需要,您甚至可以回滚删除。
这是一篇关于使用触发器进行审计的好文章。
编辑:
如果要停止对表的所有删除,可以使用以下触发器。
CREATE TRIGGER dbo.MyTable_Delete_Instead_Of_Trigger
ON dbo.MyTable
INSTEAD OF DELETE
AS
BEGIN
raiserror('Deletes are not allowed.', 16, 1)
END
对捕获所有 RPC Completed 和 SQL BatchCompleted 事件的数据库运行 SQL Profiler 并查看它以查找执行删除的任何内容。