【问题标题】:create plsql trigger for any DML operations performed in any tables为在任何表中执行的任何 DML 操作创建 plsql 触发器
【发布时间】:2017-05-01 04:31:39
【问题描述】:

我在 DB 中有大约 500 个表。如果对该表执行了任何 DML 操作,则应触发触发器以捕获这些 dml 活动并将其加载到审计表中。我不想写 500 个单独的触发器。有什么简单的方法可以实现吗?

【问题讨论】:

  • 您要审核什么?您需要信息的粒度如何?

标签: oracle plsql database-trigger audit-trail


【解决方案1】:

切换所有表的 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.

【讨论】:

    【解决方案2】:

    触发器仅用于表,而不是整个数据库。忽略维护不同数据类型、数据使用、各种表的上下文及其使用的复杂性,您正在寻找的内容将非常复杂,这是 RDBMS 在数据库级别没有解决的问题。

    在这个链接上有一些关于触发器的信息:

    https://docs.oracle.com/cd/A57673_01/DOC/server/doc/SCN73/ch15.htm

    您可以在每个表上放置一个触发器来调用相同的过程......但随后所有的复杂性都会发挥作用。

    【讨论】:

    • "触发器仅用于表,而不是整个数据库。"在一定程度上。我们可以定义系统级触发器来触发各种数据库事件。
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多