对审计列使用触发器

Posted

技术标签:

【中文标题】对审计列使用触发器【英文标题】:using triggers for audit columns 【发布时间】:2018-06-04 19:44:56 【问题描述】:

在我的公司,我是一名 java 开发人员,我们使用 hibernate orm。 出于与数据相关的目的,数据架构师希望为每个数据库上的每个表提供审计列( CREATE_DATE、CREATED_BY、UPDATE_DATE、UPDATED_BY )。这似乎有点奇怪,因为我们在应用业务中不使用这些字段。

对于我们的 java 应用程序,我想,我们有两个选择:

在每个休眠 dao 对象上使用这些审计字段创建一个基类。 定义表触发器以更新这些列。

我应该更喜欢哪一个,为什么?还有其他建议吗?

【问题讨论】:

我对数据架构师给您的选择感到非常惊讶。审计列应该由触发器设置和更新,而不是依赖于代码来管理它们。它们不是供您的代码使用,甚至不知道它们用于审核行更新以进行取证分析(如果需要)。 看看 Hibernate Envers:hibernate.org/orm/envers @ErwinBolwidt 我知道 envers。您是否建议使用 envers 的选项 1? 我建议您使用已经存在的东西,而不是自己构建它。但是“我应该更喜欢哪一个,为什么?还有其他建议吗?”是“主要基于意见。过于广泛。”。正如您现在所问的那样,这对于 SO 格式来说不是一个好问题。请阅读help center 在这里提出好的问题。 【参考方案1】:

根据我的理解和经验,第二个选项是 2 个选项中唯一好的选项。这是因为,如果数据从应用程序外部更新/填充到表中(批处理作业/数据修复等) ) ,那么第一个选项将不起作用。

另一个选项是,如果数据更新仅通过 PL SQL 发生,您的 PL SQL 团队可以更改该代码以更新代码中的这些列。但是,如果代码很大,这将是很多工作。

总的来说,触发器似乎是最好的选择。

【讨论】:

以上是关于对审计列使用触发器的主要内容,如果未能解决你的问题,请参考以下文章

使用 oracle 触发器审计 50 列

使用 oracle 触发器审计 50 列

使用触发器进行审计列

如何使用触发器将基表的所有更新列添加到审计表的多行?

在 Mysql 中添加新列时如何轻松维护审计触发器

T-SQL 触发器 - 审计列更改