Oracle

是否可以使用觸發器監控角色和權限授予/撤銷?

  • November 28, 2017

是否可以使用觸發器監控角色和權限授予/撤銷?我知道使用 Oracle 審計工具來做到這一點,但有趣的是可以使用觸發器來做到這一點。

您可以使用 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;

例子:

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

引用自:https://dba.stackexchange.com/questions/29254