Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #100022
    JPauloG
    Participante

      Senhores,

      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

      #100023
      vieri
      Participante

        uma 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;

        #100027
        Ishii
        Participante

          Olá,

          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

          #100155
          Ishii
          Participante

            Olá,

            Testei uma trigger que poderia resolver isso, mudando mais algumas coisas para atender a sua necessidade.


            create or replace trigger trg_audit_teste

            after 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

            #100158
            rman
            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_teste

              after 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…

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.