【发布时间】:2017-05-01 04:31:39
【问题描述】:
我在 DB 中有大约 500 个表。如果对该表执行了任何 DML 操作,则应触发触发器以捕获这些 dml 活动并将其加载到审计表中。我不想写 500 个单独的触发器。有什么简单的方法可以实现吗?
【问题讨论】:
-
您要审核什么?您需要信息的粒度如何?
标签: oracle plsql database-trigger audit-trail
我在 DB 中有大约 500 个表。如果对该表执行了任何 DML 操作,则应触发触发器以捕获这些 dml 活动并将其加载到审计表中。我不想写 500 个单独的触发器。有什么简单的方法可以实现吗?
【问题讨论】:
标签: oracle plsql database-trigger audit-trail
切换所有表的 DML 语句的所有高级审计:
AUDIT INSERT TABLE, UPDATE TABLE, DELETE TABLE;
我们可以管理哪些对象取决于我们拥有哪些权限。 Find out more.
AUDIT 会将基本信息写入审计线索。目的地取决于the AUDIT_TRAIL parameter 的值。如果参数设置为db,则输出将写入数据库表:我们可以在 USER_AUDIT_TRAIL 或(如果我们有权限)DBA_AUDIT_TRAIL 中看到我们的踪迹。
审计跟踪是高级别的,这意味着它记录了用户FOX 更新了EMP 表,但没有告诉我们哪些记录或实际更改是什么。我们可以通过创建细粒度审计策略来实施细粒度审计。这需要我们做更多的工作,因此我们可能决定不对所有表启用它。 Find out more.
【讨论】:
触发器仅用于表,而不是整个数据库。忽略维护不同数据类型、数据使用、各种表的上下文及其使用的复杂性,您正在寻找的内容将非常复杂,这是 RDBMS 在数据库级别没有解决的问题。
在这个链接上有一些关于触发器的信息:
https://docs.oracle.com/cd/A57673_01/DOC/server/doc/SCN73/ch15.htm
您可以在每个表上放置一个触发器来调用相同的过程......但随后所有的复杂性都会发挥作用。
【讨论】: