segunda-feira, 10 de agosto de 2015

Trigger Monitora GRANT - REVOKE - Monitorar perda de permissão - Banco de dados Oracle

Senhores,
durante o trabalho realizado em um ambiente de banco de dados Oracle 10g, deparamos com o seguinte problema. O usuário tinha permissão para conectar no sistema e executar algumas consultas no banco de dados, porém, depois de algumas horas conectado, o usuário recebia um mensagem dizendo que não tinha permissão para executar a consulta, sendo que o mesmo havia executado a mesma consulta minutos antes.
Para resolver o problema, criei uma trigger que monitorava todos os Grants e Revokes no banco de dados, quando ocorresse o problema, as informações seriam enviadas para uma tabela.

Portanto, Segue o procedimento abaixo para criação da trigger e monitoramento do seu banco de dados Oracle.





1 -  Efetuar a criação de uma tabela que será populada pela Trigger ( grant_revoke ), conforme exemplo abaixo:

create table owner.grant_revokes (
  systimestamp   date,
  ora_sysevent   varchar(30),
  who    varchar(30),
  priv varchar(30),
  ora_dict_obj_owner varchar(30),
  ora_dict_obj_name varchar(30)
)

2 - Efetuar a criação da trigger para disparar as informações com os dados do usuário que gerou o comando:

create or replace trigger owner.grant_revoke 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 ts.grant_revokes values
          (
            systimestamp,
            ora_sysevent,
            who(j),
            priv(i),
            ora_dict_obj_owner,
            ora_dict_obj_name
          );
      end loop;
    end loop;
  end;
 
 
 3 - Verificar quais dados foram populados na tabela:

 select * from owner.grant_revokes;

4 - Após coletar as informações necessárias, elimine a tabela owner.grant_revokes e a trigger owner.grant_revoke;


Bom trabalho a todos!

Nenhum comentário:

Postar um comentário