有没有办法确定谁丢了一张桌子?

Joh*_*yre 8 security sql-server

生产数据库中的一个表“神秘地”消失了。

有没有人知道有什么方法可以诊断它到底发生了什么?是谁做的?

编辑 1:这是一个内部应用程序,安全性较弱。所有的应用程序(当然除了我的 ;-) 都容易受到 SQL 注入的影响,但是我们的用户非常不成熟,而且表名不是一个可能立即显而易见的,所以我认为它不是 SQL 注入(不是这很重要......有点超出了问题的范围)。

编辑 2:另外,仅供参考;这个表已经存在很长时间了,所以它没有通过恢复“撤销”。

Pau*_*dal 14

您可以使用解释日志记录的未记录的 ::fn_dblog 函数从日志中获取信息。我现在正在教授灾难恢复课程,但如果你能等 2-3 个小时,我会为你发布如何做 - 应该也能获得用户名,而无需购买任何工具(我曾经在 2000 年对日志进行了大量研究,因为我编写了一堆 DBCC CHECKDB 在 2000 年使用的内部日志分析代码)。

[编辑以包含说明] 好的 - 完成教学,我敲了一篇博客文章,向您展示如何分析 2000、2005、2008 年的日志,以找出表何时被删除以及是谁做的。查看我在使用事务日志找出谁删除了表中的博客文章。[/编辑]

你还有交易日志吗?数据库采用哪种恢复模式?如果它很简单,请不要做任何会导致检查点的事情。如果是 FULL 或 BULK_LOGGED,不要做日志备份。其中任何一个都会导致日志被截断,然后您可能会失去查看日志的能力,尽管我在博客文章中包含了一个跟踪标志,这也可能对您有所帮助。

谢谢

PS 在不增加安全性的情况下防止表删除的一种方法是在其上创建一个简单的模式绑定视图 - 如果视图存在,DROP TABLE 将失败。


小智 8

也许是小鲍比桌...

  • 不,这足以让您点赞了。 (2认同)

RSo*_*erg 2

您也许能够从 SQL 日志中恢复此信息。