【发布时间】:2011-07-16 13:45:33
【问题描述】:
如果您需要跟踪对数据库中记录所做的更改,您将使用哪种策略仅使用基于 microsoft 的技术(MS SQL Server、C#、EAB 等)?触发器,DAL 上的 AOP,其他?以及如何显示收集到的数据?有没有关于它的模式?是否有工具或框架可以帮助实现这种解决方案?
【问题讨论】:
标签: c# .net sql-server audit change-tracking
如果您需要跟踪对数据库中记录所做的更改,您将使用哪种策略仅使用基于 microsoft 的技术(MS SQL Server、C#、EAB 等)?触发器,DAL 上的 AOP,其他?以及如何显示收集到的数据?有没有关于它的模式?是否有工具或框架可以帮助实现这种解决方案?
【问题讨论】:
标签: c# .net sql-server audit change-tracking
变更数据捕获的问题在于它对于实际审计来说不够灵活。您无法添加所需的列。此外,默认情况下它每三天转储一次记录(您可以更改此设置,但我认为您不能永远存储),因此如果您需要保留数据,则必须将记录转储到真实的审计表中很长一段时间,这是典型的需要审计记录(我们从不转储审计记录)。
我更喜欢触发方法。编写触发器时必须小心,以确保在更改多条记录时它们将捕获数据。我们为每个审核的表准备了两张表,一张用于存储日期时间和执行操作的用户或进程的 ID,一张用于存储新旧数据。由于我们做了很多多记录过程,这对我们来说至关重要。如果有人报告了一条不良记录,我们希望能够查看是否是一个进行更改的过程,如果是,还有哪些其他记录也可能受到影响。
在您创建审计流程时,创建脚本以将一组审计数据恢复为旧值。如果您已经进行了设置,那么当您迫不及待地修复问题时,这样做会容易得多。
【讨论】:
Sql Server 2008 R2 有这个内置的 - 在线书籍中查找更改数据捕获
【讨论】:
这可能不是一个流行的观点,但无论如何我都会把它扔掉。
我更喜欢所有数据库写入的存储过程。如果需要审计,它就在存储过程中。代码之外没有什么神奇的事情发生,发生的一切都在写入发生时记录在案。
如果将来需要更改表,则必须转到存储过程进行更改。更新审核的需要记录在案。而且因为我们使用了存储过程,所以更简单地对表及其审计表进行“版本化”。
【讨论】: