2

这个问题的灵感来自于我的一个存储过程,因为它调用了另一个存储过程,该过程将数据插入到一个架构被完全改变的表中。

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

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

4

3 回答 3

3

不幸的是,您无法重建发生的事情,除了:

  • 如果 DBA 有正在运行的跟踪和历史记录。SQL Server 2005 有一个默认跟踪和“黑盒”跟踪,但这些用于找出崩溃前发生的事情

  • 如果你有完整的恢复模式,那么你可以尝试一个日志查看器工具(免费的 Red Gate 一个

  • 根据活动和您的安全模型,您还可以查看 Windows 安全日志以查看谁使用 DDL 权限登录

  • SQL 事件日志也可能包含信息。例如,如果您启用了记录“权限”错误的跟踪标志,那么您可以看到它何时开始。或者进行更改的人可能已经生成了记录的其他异常

  • 你可以问那些有权利的人。这可能是一个真正的错误(例如认为他们在开发中)

于 2009-06-12T03:57:12.457 回答
1

以下查询为我提供了创建和上次修改时间。

SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbTableInQuestion]') AND type in (N'U')
于 2009-06-12T01:56:24.370 回答
0

您应该能够在事务日志中找到表的创建。 我从来没有在这里使用过任何查看器工具,我无法告诉你如何及时搜索,但一切都发生在事务中,所以必须记录下来——甚至是系统表......

于 2009-06-12T01:04:41.437 回答