.comment-link {margin-left:.6em;}

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:


Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?