MS SQL审计

时间:2009-01-08 18:40:24

标签: sql-server stored-procedures auditing

我的工作中遇到数据库问题。目前有审计工作,但其笨重,需要大量的维护,并且在一些问题上不尽如人意。所以我要替换它。

我希望以尽可能通用的方式执行此操作并设计表格,以及所有内容将如何链接和更新。

现在,这一切都很好,但我希望能够编写一种通用方法将记录插入到这些审计表中。 (无需为每个正在更改的表中的每列输入命令。)

在存储过程中是否有迭代遍历表中的所有列?我想以这样的方式编写它,它将与几个表一起使用,并自动拾取和审计添加的列等。

有什么想法吗?

编辑:猜猜我应该澄清。我将审核表中的数据。但我将使用相同的表来存储数据库中每个表的审计数据。

我不能使用触发器,因为通常,当发生更新时,它会发生在多个表中,但我希望所有这些更新都是单个更改集的一部分。

这不是问题,因为我可以在单个存储过程中完成所有更新。我更喜欢某种方式,比如循环,我可以获取所有更新的字段,找出哪些更改,并将这些更改的字段插入审计表。

我想这样做,而没有为每列提供if语句和插入语句的长列表。 (通过在通用循环中执行此操作,它将自动处理添加的列,而不会被删除的列打扰)

5 个答案:

答案 0 :(得分:1)

通过“添加列”,我猜您正在考虑审核DDL。如果您使用SQL 2005,那么您需要this link

如果不使用SQL 2005,那么你可能想要使用众多SQL架构比较工具中的一个,比如SQL Red Gates工具集可能有一些东西。

如果您没有$ for tools,那么您可能只想对information_schema.tables和information_schema.columns运行定期查询。通过在permenant表中定期捕获这些,您可以确定它们何时获得或丢失了行(因此发生了更改的模式)

如果您正在进行数据审核,那么您需要再次使用information_schema.tables和information_schema.columns来生成一些触发器。

答案 1 :(得分:0)

可能会考虑性能,但您可以向所有表添加插入和更新触发器,并将触发器插入到审计表中。

答案 2 :(得分:0)

答案 3 :(得分:0)

如果您使用的数据访问层可以捕获哪些表和列正在更新并为审计表生成插入语句,则可以执行此操作。在存储过程中?哪个存储过程?你有一个更新的吗?或者你是否每桌创建一个?

答案 4 :(得分:0)

如果它是您的选项,只需升级到sql server 2008并启用Change Data Capture。