Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #95484
    AlanSousa
    Participante

      Ola Pessoal,

      Estou com a seguinte situação:

      Tenho um sistema onde o BD é Oracle10g, e o cenário é oseguinte:

      Tenho varios esquemas integrados de alguma alguma forma ou de outra. Porem a situação especifica o qual preciso resolver é:

      Tenho entre os esquemas, os esquemas A, B e C. O Esquema A contem todas as procedures, functions e as tabelas responsáveis por fazer auditoria. O Esquema B contem triggers de para fazer a auditoria e armazenar nas tabelas do esquema A, logo, A deu certas permissoes para B. C também tem uma tabela o qual deve ser auditada e também contem uma trigger para essa auditoria, logo A teve que dar permissao para C referentes aos objetos de A.
      Contudo, Essa tabela do esquema C é utilizada pelo esquema B, então, gostaria de que, essa trigger encontrada em C seja disparada apenas quando os usuários de manipulacao sejam do esquema B e não mais por outros usuarios.
      Pensei em criar um sinonimo privado passando como privilegio de acesso apenas os usuarios do esquema B. Mas isso não funcionara, pois restringira as permissões do esquema A.
      Pensei em Criar um If na trigger onde a trigger seja disparada apenas quando o usuario for igual a “B”, porem, pra isso, eu precisaria saber ao certo o momento exato em que a trigger é disparada, existe alguma tabela que armazene essa informação? como por exemplo a all_triggers.

      Aguardo a colaboração de voces.

      #95487
      burga
      Participante

        Pensei em Criar um If na trigger onde a trigger seja disparada apenas quando o usuario for igual a “B”, porem, pra isso, eu precisaria saber ao certo o momento exato em que a trigger é disparada

        Não entendi o porquê de você precisar saber o momento exato em que a trigger é disparada… Por que a opção abaixo, que é o que você pensou em fazer, não funciona?

        create trigger...
        begin
        if (user = 'B') then;
        -- insert na tabela de auditoria de A.
        end if;
        end;
        /

        #95521
        jspaulonci
        Participante

          Bom dia AlanSousa, veja bem, a trigger é executada em run time, desconheço onde essa informação possa estar, mas se você encontrar por favor post para nós.

          Quanto a questão do disparo da trigger, eu já tive a necessidade que você teve, para corrigir bugs na aplicação os analistas nos mandavam updates em tabelas de estoque, financeiro vendas e tudo mais, nós fizemos um if na trigger passando o usuário que queriamos restringir ou permitir, acho que isso deve resolver.

          Se enontrar outra forma post para nós.

          abraços

          #95523
          Ishii
          Participante

            Olá,

            Posso estar me confundindo todo, mas o momento em que a trigger dispara não exatamente o evento? Before ou After? On Insert/Delete/Update ou em Database Event?

            Não entendi também o funcionamento correto da aplicação, afinal se o user B é apenas o Owner não significa que o acionamento da trigger será feito por ele…

            []s Ishii
            #polemica

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