2

我想捕获可审计字段以跟踪特定实体发生的事情是一个好习惯(比如 createdBy、creationDate、modifiedBy、modifiedDate)

  1. 我假设如果一个对象从未被修改过,那么只为 SNMPv3 事件捕获以下可审计字段是有意义的(比如 createdBy、creationDate)

  2. 我假设如果一个对象可以由多人在创建后修改,例如用户配置文件可以由自己或管理员修改,那么捕获所有上述属性(例如 createdBy、creationDate、modifiedBy、modifiedDate)是有意义的

  3. 假设不需要每个实体的审计跟踪历史,将所有可审计属性存储在实体本身中是否有意义

  4. 对于上述用例,将审计委托给第三方框架(比如 JBoss Envers - http://www.jboss.org/envers )是否有意义。

  5. 假设一个实体(比如采购订单)由用户 X 创建和维护,用户 Y 对上述采购订单进行了一些改进。谁应该被标记为该实体的所有者(是创建者还是修改者)。在这种情况下,creationDate 可能根本没有任何相关性,因此在此处跟踪该字段是否有意义。

注:底层持久层基于JPA,Hibernate 3.3.x

4

1 回答 1

1

(1) 和 (2) 似乎是合理的,尽管将所有实体一视同仁而不是将其复杂化为仅创建和创建/修改实体可能不会有什么坏处。

(3) 将它们存储在实体上是最简单的,但我很想只为审计数据创建一个表或每个实体的表。如果您想存储多个修改,即完整的历史记录,这将为您提供灵活性。查询主要实体时可能会略微提高性能。

(4) Envers 看起来既有趣又简单,但它似乎存储了完整的历史记录,并且您表示这不是必需的,因此它可能有点矫枉过正。

(5) 我想说创建者始终是导致初始插入的人(或进程),而修饰符是导致更新的最后一个人/进程。如果您想对所有者做出业务决策,请将其视为单独的字段,而不是您的审计解决方案的一部分。

于 2010-01-04T07:16:04.783 回答