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

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

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

===============>>#1 票数:18 已采纳

你对这张表的阅读与阅读量有多大关系?

我使用了一个审计表,其中包含Table,Column,OldValue,NewValue,User和ChangeDateTime的列 - 通用程序足以与DB中的任何其他更改一起使用,并且当大量数据写入该表时,报告这些数据非常稀少,可以在当天的低使用期运行。

补充:如果需要考虑数据量与报告的数量,可以将审计表复制到只读数据库服务器,这样您就可以在必要时运行报告,而不会让主服务器停止工作。

===============>>#2 票数:6

我们正在使用两个表设计。

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

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

另一种选择是使用第三方工具,例如SQL Server中的ApexSQL Audit或Change Data Capture功能。

===============>>#3 票数:2

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

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

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

===============>>#4 票数:1

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

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

===============>>#5 票数:1

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

===============>>#6 票数:1

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

  ask by Brandon Wood translate from so

未解决问题?本站智能推荐: