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