Sunday, May 21, 2006
Trigger de DDL
Se houver a necessidade de personalizar sua auditoria, as triggers de DDL são uma opção. Imagine que o auditor necessite que uma procedure seja executada a cada novo usuário criado no banco. A solução que apresento é capturar o evento de create e testar se o tipo de objeto é 'user', então executar a procedure (log_user).
SQL> create table
2 audit_usr (
3 quem_criou varchar2(30),
4 quem_foi_criado varchar2(30),
5 quando date default sysdate
6 );
Table created.
SQL>
SQL> create or replace
2 procedure log_user(
3 p_criou in varchar2,
4 p_foi_criado in varchar2
5 )
6 is
7 begin
8 insert into audit_usr ( quem_criou, quem_foi_criado )
9 values ( p_criou, p_foi_criado );
10 end;
11 /
Procedure created.
SQL> show error
No errors.
SQL>
SQL> create or replace
2 trigger trg_ac_audituser
3 after create on database
4 begin
5 if ( ora_dict_obj_type = 'USER' )
6 then
7 log_user( ora_login_user, ora_dict_obj_name );
8 end if;
9 end;
10 /
Trigger created.
SQL> show error
No errors.
SQL> create user a identified by a;
User created.
SQL>
SQL> select * from audit_usr;
QUEM_CRIOU QUEM_FOI_CRIADO QUANDO
------------------------------ ------------------------------ -------------------
OPS$MARCIO A 21/05/2006 22:35:44
1 row selected.
Labels: how to