不会为 alter table 触发的审计触发器,但仅适用于 dba 用户

Posted

技术标签:

【中文标题】不会为 alter table 触发的审计触发器,但仅适用于 dba 用户【英文标题】:Audit trigger that doesn't fire for alter table, but only for dba users 【发布时间】:2016-04-28 22:27:45 【问题描述】:

您好,我处于这种情况,我是一名 DBA,每次我更改带有非空字段并添加默认值的表时,审核触发器都会将我的用户名写入所有位置(当然,可怜的家伙只是做他的工作)。问题是我们的开发人员不喜欢我的名字出现在审计表上,所以我需要找到一种方法来解决这种情况......也许用 if 条件更改触发器?创建第二个我每次执行此类操作时都会激活的?更好的想法???

【问题讨论】:

您是否在用户处于活动状态时执行此操作 - 这似乎是个坏主意?如果不是,您不能在执行此操作时禁用触发器吗? 【参考方案1】:

第一个响应是使用if 条件更改触发器。如果当权者不关心列上的NULL-ability 更改,则不应对其进行审核。

但是,我不太喜欢这种解决方案。审计历史表的存在是有原因的。也许还有其他事情发生,例如在进行更改时发出通知。如果是这样,通知的逻辑应该改变而不是审计表。

这类似于编译代码时的警告与错误。更改 NULL-ability 仍会在审计表中,因此 DBA 可以在需要时查看完整的更改历史记录。这并不意味着每次此类更改都应通知他们。

注意:这可能需要更改触发器并添加“优先级”或类似于审计表的内容。此级别可用于设置通知。

【讨论】:

以上是关于不会为 alter table 触发的审计触发器,但仅适用于 dba 用户的主要内容,如果未能解决你的问题,请参考以下文章

我如何知道数据库触发器是 DROP_TABLE 还是 ALTER_TABLE?

错误:无法 ALTER TABLE,因为它在尝试删除表中的列时有挂起的触发器事件

django.db.utils.OperationalError: cannot ALTER TABLE 因为它有挂起的触发事件

带参数的审计表

重命名时Oracle 12C审核触发器

Sybase ASE 15.7 中的审计表触发器