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

Translate

我过去使用的一种简单方法基本上是创建第二个表,该表的结构与我要审核的表相同,然后在主表上创建更新/删除触发器。在更新记录/删除记录之前,当前状态通过触发器保存到审核表中。

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

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

This question and all comments follow the "Attribution Required."

所有的回答

Translate

您期望该表有多少写作与阅读?

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

添加:如果需要考虑数据量与报告数量之间的关系,则可以将审核表复制到只读数据库服务器,从而使您可以在需要时运行报告,而不会使主服务器停止工作。

来源
Translate

为此,我们使用了两个表设计。

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

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

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

来源
Translate

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

使用CLR和单个审核表。
使用SQL 2005 CLR创建通用审核触发器

为每个要审核的表使用触发器和单独的审核表。
如何审核对SQL Server数据的更改?

来源
Translate

有内置的审计程序包吗? Oracle有一个很好的软件包,它甚至可以将审计更改发送到单独的服务器上,而任何正在修改SQL的坏人都无法访问。

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

来源
Translate

OmniAudit可能是您需要的一个很好的解决方案。我以前从未使用过它,因为我很高兴编写自己的审计例程,但这听起来不错。

来源
Translate

我使用格雷格在他的著作中描述的方法回答并使用从表触发器中调用的存储过程填充审核表。

来源