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

是否可以使用触发器监视角色和权限授予/撤销?我知道使用Oracle审计工具做到这一点,但有趣的是,使用触发器可以做到这一点.
最佳答案
你可以用DDL触发器([before | after] grant或revoke)来做到这一点.

文档位于Oracle® Database PL/SQL Language Reference.您应该仔细查看event attribute functions表和Event Attribute Functions for Client Event Triggers部分,以了解这些上下文中可用的信息.

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

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;

例:

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

转载注明原文:oracle – 是否可以使用触发器监视角色和权限授予/撤销? - 代码日志