- Este tópico contém 4 respostas, 4 vozes e foi atualizado pela última vez 14 anos, 7 meses atrás por
rman.
-
AutorPosts
-
15 de julho de 2011 às 10:56 pm #100022
JPauloG
ParticipanteSenhores,
Necessito de uma trigger para auditar uma tabela temporária, a qual é criada durante determinado processo do sistema. A tabela segue um padrão de nomeação, nomedatabela_computador_usuario.
Como poderia fazer com que a trigger auditasse todas as tabelas que seguem este padrão?
Grato
João Paulo
15 de julho de 2011 às 11:03 pm #100023vieri
Participanteuma trigger apenas para N tabelas ficaria complicado.
acho melhor usar soluções da própria oracle de FGA.
http://www.dba-oracle.com/security/fga_enhancements.htm
http://mportes.blogspot.com/2005/05/aud … t-10g.html
alguns exempplos:
begin
dbms_fga.add_policy (
object_schema=>’CLAIM_SCHEMA’,
object_name=>’CLAIMS’,
policy_name=>’LARGE_CLAIM’,
audit_condition=>
‘CLAIM_AMOUNT>500 OR PAID_AMOUNT>500’,
audit_column=>
‘SSN, PROC_CODE’
);
end;
/This was used to turn auditing on only for select statements against the table. The same can be now be rewritten as:
begin
dbms_fga.add_policy (
object_schema=>’CLAIM_SCHEMA’,
object_name=>’CLAIMS’,
policy_name=>’LARGE_CLAIM’,
audit_condition=>
‘CLAIM_AMOUNT>500 OR PAID_AMOUNT>500’,
audit_column=>
‘SSN, PROC_CODE’,
statement_types => ‘SELECT’);
end;
/To audit insert, delete, and update for the same table on the same policy condition and columns, we can use:
begin
dbms_fga.add_policy (
object_schema=>’CLAIM_SCHEMA’,
object_name=>’CLAIMS’,
policy_name=>’LARGE_CLAIM’,
audit_condition=>
‘CLAIM_AMOUNT>500 OR PAID_AMOUNT>500’,
audit_column=>
‘SSN, PROC_CODE’,
statement_types => ‘SELECT,INSERT,UPDATE,DELETE’
);
end;16 de julho de 2011 às 3:11 am #100027Ishii
ParticipanteOlá,
Uma outra idéia seria criar uma Trigger de DDL com uma condição de (WHEN) de quando a tabela temporária for criada e atenda a essa sua especificação, crie no Banco também uma trigger de auditoria para essa tabela temporária.
Acho que daria um bom trabalho (codificação mesmo e testes) mas seria um desafio interessante. Não vi se teria restrições ainda… mas ainda acho possível…
[]s Ishii
27 de julho de 2011 às 4:36 am #100155Ishii
ParticipanteOlá,
Testei uma trigger que poderia resolver isso, mudando mais algumas coisas para atender a sua necessidade.
create or replace trigger trg_audit_testeafter DDL on teste.schema
begin
if ora_sysevent = 'CREATE' and ora_dict_obj_type = 'TABLE' and ora_dict_obj_name like 'TAB_TESTE_%' then
--
execute immediate ('create or replace trigger trg_' || ora_dict_obj_name ||
' before insert on ' || ora_dict_obj_name ||
' for each row ' ||
'begin
null;
end trg_' || ora_dict_obj_name ||';');
--end if;
end trg_audit_teste;
Criei essa trigger de DDL, note que a opção ora_dict_obj_name deverá ter a regra da sua tabela temporária. A trigger criada tem como body apenas um null e pode ser alterado pela condições que você precisa na auditoria. Mude também o teste.schema para o owner correto que ficaria .schema.
create table TAB_TESTE_MAQUINA
(
A NUMBER
)Criei uma tabela na condição e voilá:
create or replace trigger trg_TAB_TESTE_MAQUINA before insert on TAB_TESTE_MAQUINA for each row
begin
null;
end trg_TAB_TESTE_MAQUINA;Trigger criada!!!
Dai em diante… boa sorte…
[]s Ishii
27 de julho de 2011 às 2:56 pm #100158rman
Participante[quote=”Ishii”:3rswh0sj]Olá,
Testei uma trigger que poderia resolver isso, mudando mais algumas coisas para atender a sua necessidade.
create or replace trigger trg_audit_testeafter DDL on teste.schema
begin
if ora_sysevent = 'CREATE' and ora_dict_obj_type = 'TABLE' and ora_dict_obj_name like 'TAB_TESTE_%' then
--
execute immediate ('create or replace trigger trg_' || ora_dict_obj_name ||
' before insert on ' || ora_dict_obj_name ||
' for each row ' ||
'begin
null;
end trg_' || ora_dict_obj_name ||';');
--end if;
end trg_audit_teste;
Criei essa trigger de DDL, note que a opção ora_dict_obj_name deverá ter a regra da sua tabela temporária. A trigger criada tem como body apenas um null e pode ser alterado pela condições que você precisa na auditoria. Mude também o teste.schema para o owner correto que ficaria .schema.
create table TAB_TESTE_MAQUINA
(
A NUMBER
)Criei uma tabela na condição e voilá:
create or replace trigger trg_TAB_TESTE_MAQUINA before insert on TAB_TESTE_MAQUINA for each row
begin
null;
end trg_TAB_TESTE_MAQUINA;Trigger criada!!!
Dai em diante… boa sorte…
[]s Ishii[/quote]
Muito bacana Ishii…
Um Trigger criando outra em tempo de execução…
-
AutorPosts
- Você deve fazer login para responder a este tópico.