我发现了几个讨论在这样的-但没有什么来比较所有三个机构的下一个线程。

因此,这里是我的问题...

我需要审计DB变化插入\更新\删除的业务对象。

我能想到的三种方法可以做到这

1)DB触发器

2)休眠拦截

3)AOP弹簧

(这个问题是具体的弹簧\休眠 DBMS-我想这是中性的java\c#或休眠\它能够--但是如果你的答案是依赖于C++、Java或具体执行的休眠-请具体说明)

有哪些优点和缺点的选择之一,这些战略?

我不要求用于执行的细节。-这是一个设计的讨论。

我希望我们可以使这一部分的社会wiki

有帮助吗?

解决方案

我只能谈论触发器和原则才能享受它的全部好处,因为我不知道的足够多的abou tSpring AOP。

它取决于一如既往,什么是最重要的是你。

DB触发器

  • 都快
  • 总是称为,即使是从当地SQL,剧本,外部应用程序。
  • 编写数据库的其NH不知道。它将在当前会议。(这可能导致意想不到的效果)
  • 做通常不知道什么对你届会议(说:登录名称)。

它能够拦截/活动

  • 不DBMS具体。
  • 能让你容易进入你的业务信息,如用户会议,客户机的名字,某些计算或解释,本地化,等等。
  • 能让你的声明的配置,等属性的实体,其定义如果该实体需要记录和如何。
  • 能让你闭记录,这可能是重要的升级,进口、特别行动,是不会触发由用户。
  • 允许你一个实体视为商业模式。你可能更接近用户的观点。

其他提示

我明白这是不是100%相关的问题,但它确实有新的选择增加价值。

有两个方法可以审核是怎么回事。

阅读事务日志:如果数据库处于完全恢复模式,然后约INSERT的所有细节,UPDATE,DELETE和DDL语句被记录到事务日志。

问题是,它是非常复杂的阅读,因为它本身不支持,并且你需要一个第三方交易日志读者如的 ApexSQL日志 SQL日志救援(后者是免费的,但只支持SQL 2000)。

这种方法的优点是,你从字面上没有做,除了把你的数据库完全恢复模式的任何改变。

SQL Server跟踪:跟踪将在跟踪文件捕捉一切,包括也可能需要一些合规性方案select语句。缺点是,走线需要的文本文件进行解析和组织。

我想不出任何比较好的理由不使用数据库触发器来审计数据库更改。插入,更新和删除有可能从各种渠道访问数据库 - 触发器将捕获所有这些; Hibernate等等不会。

我天衣当你考虑审计,你需要考虑它是什么。首先,它是havea的谁改变了什么,是什么改变了,所以你可以背出坏的变化,可以识别系统出现问题(我们可以看到有哪几种不同的充应用casued这有助于快速哪一个是打破识别的变化)记录所以你可以找出谁做的改变。最后可能是真正的关键,当谈到检测欺诈行为。如果你做的一切从用户界面,你将永远不会看到用户实施欺诈谁在后台更改数据对自己的支票写。如果从界面做的一切,可能你必须有设置在TABEL水平,从而打开门诈骗开始与权限。如果从界面做的一切,你会不知道哪个不满的雇员删除整个用户表为纯烦恼值。如果从前端做的一切,你会不知道哪个不称职的DBA不小心更新了所有客户的订单给同一客户。我不能支持你失去了你为什么需要审计摆在首位的很大一部分用任何东西,除了触发审核。

使用Hibernate拦截器来执行审核日志是很大的缺陷。我通过推荐这种方法,博客的数量,而不指出其最明显的缺陷惊呆了 - 拦截器必须使用新的交易记录审计。这意味着你可以成功保存的主要交易,并有失败记录审核交易的系统崩溃!

,我恰好在now.There一个老问题是一个选择可用,并且是Envers这与休眠从版本起始沿可用3.6起..

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top