在SQL Server中实施审计表的建议?

我过去使用的一个简单方法基本上只是创建第二个表,其结构反映我想要审核的结构,然后在主表上创建更新/删除触发器。在更新/删除记录之前,通过触发器将当前状态保存到审计表。

虽然有效,但审计表中的数据不是最有用或最简单的报告。我想知道是否有人有更好的审计数据更改方法?

这些记录不应该有太多的更新,但它是高度敏感的信息,所以对客户来说,所有变更都经过审核并且易于报告,这一点很重要。

0
我应该指出,该功能仅适用于企业版。
额外 作者 user17060,
SQL Server 2008对新的更改数据捕获功能提供了一些内置支持<< >>其他资源>> msdn .microsoft.com / EN-US /库/ bb522489.aspx&GT ;
额外 作者 andyp,
更改数据捕获功能似乎更适合确保应用程序对象与数据库保持一致,而不是审核解决方案。 (例如,它只会存储2天的更改)。您仍然需要轮询更改并将其写入表中,因此您可能只需创建并使用触发器按如下方式写入中央审计​​表。哦,上面的网址已损坏,请使用此链接
额外 作者 BJury,

6 答案

有没有内置的审计软件包? Oracle有一个很好的包,它甚至会将审计更改发送到任何正在修改SQL的坏人访问之外的单独服务器。

他们的例子非常棒......它显示了如何警告任何修改审计表的人。

0
额外

OmniAudit might be a good solution for you need. I've never used it before because I'm quite happy writing my own audit routines, but it sounds good.

0
额外

我使用Greg在其答案中描述的方法并使用从表触发器调用的存储过程填充审计表。

0
额外

你预计这张桌子有多少文字和读数?

我使用了一个单独的审计表,其中包含Table,Column,OldValue,NewValue,User和ChangeDateTime的列 - 通用性足以处理数据库中的任何其他更改,并且在将大量数据写入该表时,报告因为这些数据足够稀少,可以在一天中的低使用时段运行。

Added: If the amount of data vs. reporting is a concern, the audit table could be replicated to a read-only database server, allowing you to run reports whenever necessary without bogging down the master server from doing their work.

0
额外

我发现这两个链接很有用:

Using CLR and single audit table.
Creating a generic audit trigger with SQL 2005 CLR

Using triggers and separate audit table for each table being audited.
How do I audit changes to SQL Server data?

0
额外

我们为此使用两个桌子设计。

一个表包含关于事务的数据(数据库,表名,模式,列,触发事务的应用程序,启动事务的登录的主机名,日期,受影响的行数以及更多)。

第二个表仅用于存储数据更改,以便我们可以根据需要撤消更改并报告旧/新值。

另一种选择是为此使用第三方工具,例如 ApexSQL Audit 或更改数据捕获功能SQL Server。

0
额外