审计sql server数据库中的记录更改

时间:2011-03-16 12:40:49

标签: c# .net sql-server audit change-tracking

如果需要,只使用基于微软的技术(MS SQL Server,C#,EAB等)跟踪数据库中记录的更改,您将使用哪种策略?触发器,DAL上的AOP,其他?以及如何显示收集的数据?有关于它的模式吗?是否有工具或框架有助于实施此类解决方案?

3 个答案:

答案 0 :(得分:2)

Sql Server 2008 R2具有此内置 - 在线书籍中查找更改数据捕获

答案 1 :(得分:2)

变更数据捕获的问题在于它不够灵活,无法进行真正的审计。您无法添加所需的列。此外,默认情况下它每隔三天转储一次记录(你可以改变它,但我认为你不能永久存储)所以如果你需要保存数据,你必须让记录到真正的审计表中。很长一段时间,这是审计记录的典型需求(我们从不转储我们的审计记录)。

我更喜欢触发方法。编写触发器时必须小心,以确保在更改多个记录时它们将捕获数据。我们为每个审计的表有两个表,一个用于存储执行操作的用户或进程的日期时间和ID,另一个用于存储旧数据和新数据。由于我们做了很多多个记录过程,这对我们来说至关重要。如果有人报告了一个不良记录,我们希望能够看到它是否是一个进行更改的进程,如果是,那么其他记录也可能受到影响。

在创建审核流程时,创建脚本以将一组审核数据还原为旧值。如果你已经有了这个设置,那么在枪下修理东西时要做到这一点要容易得多。

答案 2 :(得分:1)

这可能不是一个流行的观点,但无论如何我会把它扔出去。

我更喜欢所有数据库写入的存储过程。如果需要审核,它就在存储过程中。在代码之外没有任何魔法发生,所发生的一切都记录在写入发生的位置。

如果将来需要更改表,则必须转到存储过程进行更改。在那里记录了更新审计的需要。因为我们使用了存储过程,所以对表及其审计表进行“版本化”更简单。