Suggestions for implementing audit tables in SQL Server?我过去使用的一种简单方法基本上是创建第二个表,该表的结构与我要审核的结构相同,然后在主表上创建更新/删除触发器。 在更新记录/删除记录之前,当前状态通过触发器保存到审核表中。 虽然有效,但审计表中的数据并不是最有用或最简单的报告依据。 我想知道是否有人有更好的方法来审核数据更改? 这些记录的更新不应该太多,但它是高度敏感的信息,因此对客户而言,所有更改都必须经过审核并易于报告,这一点很重要。 您期望该表有多少写作与阅读? 我使用了一个审计表,其中有用于Table,Column,OldValue,NewValue,User和ChangeDateTime的列-通用性足以与数据库中的任何其他更改一起工作,并且在将大量数据写入该表的同时,报告这些数据非常稀疏,因此可以在一天的低使用时段运行。
添加: 为此,我们使用了两个表设计。 一个表保存着有关事务的数据(数据库,表名,架构,列,触发事务的应用程序,启动事务的登录主机名,日期,受影响的行数以及更多)。 第二个表仅用于存储数据更改,以便我们可以在需要时撤消更改并报告新旧值。 另一个选择是为此使用第三方工具,例如ApexSQL Audit或SQL Server中的Change Data Capture功能。 我发现这两个链接很有用:
使用CLR和单个审核表。
对要审核的每个表使用触发器和单独的审核表。 我使用Greg在他的答案中描述的方法,并使用从表触发器调用的存储过程填充审核表。 OmniAudit可能是您需要的一个很好的解决方案。我以前从未使用过它,因为我很高兴编写自己的审计例程,但这听起来不错。 有内置的审计程序包吗? Oracle有一个很好的软件包,它甚至可以将审核更改发送到其他修改SQL的恶意人员无法访问的服务器上。 他们的例子很棒...它显示了如何向任何修改审核表的人发出警报。 |