实现审计跟踪 - Spring AOP vs.Hibernate Interceptor与DB Trigger

RN.*_*RN. 13 database audit hibernate spring-aop

我在这个问题上找到了几个讨论主题 - 但没有任何内容在一个主题下对所有三种机制进行了比较.

所以这是我的问题......

我需要审核数据库更改 - 插入\ updates \删除到业务对象.

我可以想到三种方法来做到这一点

1)DB触发器

2)Hibernate拦截器

3)Spring AOP

(这个问题特定于Spring\Hibernate\RDBMS-我猜这对java\c#或hibernate \nhibernate-是中立的 - 但如果你的答案依赖于C++或Java或者hibernate的具体实现 - 请注明)

选择其中一种策略有哪些优缺点?

我不是要求实现细节.-这是一个设计讨论.

我希望我们可以将其作为社区维基的一部分

Ste*_*ger 5

我只能谈谈Triggers和NHibernate,因为我对tSpring AOP还不够了解。

与往常一样,这取决于对您来说最重要的是什么。

数据库触发器

  • 很快
  • 总是被调用,即使是从本机 SQL、脚本、外部应用程序。
  • 将数据写入 NH 不知道的 DB 中。它将在当前会话中丢失。(这可能会导致意想不到的结果)
  • 通常对您的会话一无所知(例如:登录名)。

NHibernate 拦截器/事件

  • 不是特定于 DBMS。
  • 允许您轻松访问您的业务信息,例如用户会话、客户端机器名称、某些计算或解释、本地化等。
  • 允许您声明性配置,例如实体上的属性,它定义实体是否需要记录以及如何记录。
  • 允许您关闭日志记录,这对于升级、导入、非用户触发的特殊操作可能很重要。
  • 允许您查看业务模型的实体视图。您可能更接近用户的观点。