是否可以使用触发器监视角色和权限授予/撤销?

Cen*_*ion 2 trigger oracle audit

是否可以使用触发器监视角色和权限授予/撤销?我知道使用 Oracle 审计工具来做到这一点,但有趣的是可以使用触发器来做到这一点。

Mat*_*Mat 6

您可以使用 DDL 触发器([before|after] grantrevoke)来做到这一点。

这些文档位于Oracle® Database PL/SQL Language Reference 中。您应该仔细查看事件属性函数表和客户端事件触发器事件属性函数部分,以了解在这些上下文中可用的信息。

这是一个示例触发器(可能不完整,这只是一个示例),它将记录有关grantrevoke事件的基本信息,假设log表具有适当的列:

create or replace trigger trigger1 after grant or revoke on database
  declare
    priv  dbms_standard.ora_name_list_t;
    who   dbms_standard.ora_name_list_t;
    npriv pls_integer;
    nwho  pls_integer;
  begin
    npriv := ora_privilege_list(priv);
    if (ora_sysevent = 'GRANT') then
      nwho := ora_grantee(who);
    else
      nwho := ora_revokee(who);
    end if;
    for i in 1..npriv
    loop
      for j in 1..nwho
      loop
        insert into log values
          (
            systimestamp,
            ora_sysevent,
            who(j),
            priv(i),
            ora_dict_obj_owner,
            ora_dict_obj_name
          );
      end loop;
    end loop;
  end;
Run Code Online (Sandbox Code Playgroud)

例子:

SQL> grant select on log to bar;
Grant succeeded.

SQL> revoke select on log from bar;
Revoke succeeded.

SQL> select * from log;
DT                           WHAT   WHO PRIV   OWN OBJ
25-NOV-12 05.29.19.095403 PM GRANT  BAR SELECT MAT LOG
25-NOV-12 05.29.27.004610 PM REVOKE BAR SELECT MAT LOG
Run Code Online (Sandbox Code Playgroud)