怀疑有人正在从我的SQL Server '05数据库中删除记录 - 有什么方法可以检查吗?

时间:2010-06-29 13:26:31

标签: sql sql-server

我认为对我的SQL Server '05数据库具有共享访问权限的人是出于自身原因从数据库中的表中删除记录。

是否有任何审核表我可以检查以查看最近X天内可能在数据库上运行的手动删除查询?

感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

我会在相关表格中添加一个删除触发器。这将允许您保留已删除记录的确切日志(即,如果在您的触发器上插入另一个表,等等)

答案 1 :(得分:4)

可能要考虑暂时使用触发器。

Here就是一个例子。

答案 2 :(得分:3)

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC

答案 3 :(得分:1)

SQL Server Profiler可能是最简单的方法。您可以将其设置为将所有已执行的查询转储到数据库中的表,或转储到可能更适合您的情况的文件。您还可以设置过滤器以仅捕获您感兴趣的查询,或者日志文件变得非常大。

答案 4 :(得分:0)

除非您事先设置好(通过触发器,运行Profiler跟踪等),否则没有简单的本机方法来“拉出”针对SQL Server数据库运行的命令。

@ David的查询过程缓存的想法是一种可能性,但只有在执行计划仍在内存中时才有效。

可以使用第三方交易日志阅读器。它们可以用来读取事务日志的内容,但是只有在数据/命令仍在那里时才有用,并且在“X天”之后看起来不太可能。

另一种解决方法取决于备份。

  • 从问题时间之前恢复copmlete备份,并与当前版本进行比较和对比。这将显示数据是否已被删除,而不是如何删除。
  • 如果您处于完全备份模式并且有事务日志备份,则可以执行各种类型的增量恢复,并实际观察发生的删除(如果是),但这可能需要大量的时间点恢复,并将是非常耗时的。