关于在金融系统的SQL Server 2008数据库中添加事务审计的建议

时间:2012-01-12 19:43:29

标签: sql-server sql-server-2008 triggers

我正在开发一个用于存储付款信息的应用程序。我们目前有一个交易审计表,因此可以使用:

如果在审计中的任何表中字段发生更改,我们会编写一个审计行,其中包含:1表名,字段名,旧值,新值和时间戳。每行更新时,每个字段会发生一次插入。

我总是避免使用SQL Server中的触发器,因为它们难以记录并且可以使故障排除更加困难,但这是否是触发器的一个很好的用例?

目前,应用程序确定需要自行添加的所有审计行,并且有时会向服务器发送数十万个审计行INSERT语句。这对我们来说非常缓慢而且无法维持。

3 个答案:

答案 0 :(得分:2)

如果您正在运行企业版,请查看Change Data Capture。它提供了您正在寻找的DML审计跟踪,而没有与触发器或自定义用户/时间戳记录相关联的开销。

答案 1 :(得分:0)

我曾经在金融系统上工作过,每个审计中的表都有自己的审计表(例如USERS那里有USERS_AUDIT),具有相同的模式(减去主键)加上:

  1. 用于表示更改类型的char(1)列('I'=插入,'U'=更新,'D'=删除)

  2. 日期时间列,默认值为GETDATE()

  3. varchar(255)列,指示进行更改的用户(默认为USER_ID()

  4. 这些表总是被审计中的表上的触发器插入(仅附加)。这将导致更少的插入和更好的性能,但代价是必须管理更多的审计表。

答案 2 :(得分:0)

之前我已经在SPROCS中实现了审计逻辑,但同样的想法适用于在触发器中执行它。

工作表:(id,field1,field2,field3,... field-n)

历史表:(用户ID,日期/时间,行动(CUD),id,field1,field2,field3,... field-n)

这也可以轻松查询数据如何历史变化。

每次更改表格中的一行时,都会在历史记录表格中创建一条记录。

我们的一些表格非常大 - 超过100个字段,因此100多个插页的负载太大,也无法快速查看数据发生的情况。