2009-06-12 40 views
2

这个问题的灵感来自于我的一个存储过程,因为它调用另一个存储过程,将数据插入到模式已完全更改的表中。执行CREATE TABLE或ALTER TABLE操作时,sql server会存储哪些审计信息?

问题是你有一个SQL Server数据库中的表,你不知道它是如何到达那里的。您没有适用于自定义审计信息的任何DDL触发器,并且表DDL的源代码管理存储库中没有记录。只使用SQL Server,您可以从表中获取哪些取证数据。

对于版本控制和DDL触发器的建议,我自己以及在类似情况下绊倒这个问题的人都不会被帮助。这些都是很好的前进解决方案,如果公司政治允许我们实施这些解决方案,那么这个博客上有很多关于这些主题的信息。我和我的情况下真正需要的是能够从SQL服务器收集尽可能多的数据片段,并与我们可以提供的任何其他数据相结合。

回答

3

不幸的是,你有没有办法来重建发生了什么,除了:

  • 如果DBA可以运行的痕迹和历史。 SQL Server 2005有一个默认跟踪,并有“黑匣子”跟踪,但这些用于找出崩溃前发生的事情

  • 如果您有完整恢复模型,那么您可以尝试日志查看器工具free Red Gate one

  • 根据活动和安全模型,您还可以检查Windows安全日志,看看谁与DDL特权

  • 的SQL事件日志中还可能有信息登录。例如,如果您启用了记录“权限”错误的跟踪标志,那么您可以看到它何时启动。或者进行更改的人员可能产生了其他记录中的例外

  • 您可以问有权限的人。这可能是一个真正的错误(例如,以为他们在开发)

0

你应该能够在transaction log.中找到表的创建我从来没有在这里使用过任何查看器工具,我也无法告诉你如何及时回溯,但所有事情都发生在交易,所以它必须记录 - 即使系统表...

+0

我能够从sys.objects创建和修改时间。我怀疑这个交易日志仍然存在,因为它已经超过一个月了,但我会问我们的系统管理员是否存在。 – 2009-06-12 01:54:28

1

以下查询让我创建和上次修改时间。

SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbTableInQuestion]') AND type in (N'U')