Cen*_*ion 2 trigger oracle audit
是否可以使用触发器监视角色和权限授予/撤销?我知道使用 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;
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)