2008-08-06 79 views
27

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

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

不应该有这些记录太多更新,但它是高度敏感的信息,因此它是所有的变化和审计报告很容易对客户来说很重要。

+2

SQL Server 2008对新的更改数据捕获功能具有一些内置支持 andyp 2008-08-29 17:42:40

回答

17

你期望这张表的读数与读数有多大?

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

补充: 如果数据与报告的数量是一个问题,审计表可以被复制到一个只读的数据库服务器,使您可以进行,而不做市场影响了主服务器在必要时报告他们的工作。

1

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

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

1

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

1

我用格雷格描述的方法在他的answer,并从表中的触发器调用的存储过程填充审计表。

6

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

一个表持有有关事务(数据库,表名称,架构,列,应用程序触发交易,主机名进行登录即开始交易,到目前为止,受影响的行数和夫妇更多)数据。

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

另一种选择是使用第三方工具,在SQL Server中这如ApexSQL Audit或变更数据捕获功能。