【发布时间】:2015-08-25 21:49:27
【问题描述】:
我希望能够审核在 db 表上执行的活动(更新、插入等)。设计这个最有效的方法是什么?我想到的一种解决方案是为每个表创建一个审计表,并在使用新值更新表之前使用 SQL 触发器插入前一个值。
【问题讨论】:
-
如果您需要保留历史记录,更好的方法是“软删除”。关键是您永远不会更新也永远不会删除记录,而是插入新记录并将旧记录标记为已删除(使用 datetime2 保持删除日期)。
-
触发器是实现数据审计的传统标准方式,恕我直言,触发器是少数几个正确的用例之一。但是,在 SQL Server 的更高版本中,还有多种管理工具可以执行此操作,这些工具可能更可取,特别是“数据库审核”功能。见这里:msdn.microsoft.com/en-us/cc280386.aspx
-
如果您已经创建了自己的触发器,“使用 SQL 触发器在使用新值更新表之前插入先前的值。”那么为什么不使用它们呢?顺便说一句,触发器是很好的工具,但需要非常小心地使用它们。在某些情况下,它们可能会显着降低性能。
-
SQL Server 不包括内置的 BEFORE 触发器,而只有 AFTER 和 INSTEAD OF 触发器(我说的是 DML 触发器,因为还有其他类型)。因此,如果你想实现 BEFORE 触发器,那么你可以使用触发器的 INSTEAD。
-
CodeSmith 非常适合创建所有这些触发器和历史表。
标签: .net sql-server audit