Oracle
是否可以使用觸發器監控角色和權限授予/撤銷?
是否可以使用觸發器監控角色和權限授予/撤銷?我知道使用 Oracle 審計工具來做到這一點,但有趣的是可以使用觸發器來做到這一點。
您可以使用 DDL 觸發器(
[before|after] grant
或revoke
)來做到這一點。這些文件位於Oracle® Database PL/SQL Language Reference中。您應該仔細查看事件屬性函式表和客戶端事件觸發器的事件屬性函式部分,以了解在這些上下文中可用的資訊。
這是一個範例觸發器(可能不完整,這只是一個範例),它將記錄有關
grant
和revoke
事件的基本資訊,假設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