- Este tópico contém 3 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 7 meses atrás por
Ishii.
-
AutorPosts
-
11 de agosto de 2010 às 8:49 pm #95484
AlanSousa
ParticipanteOla 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.
11 de agosto de 2010 às 9:19 pm #95487burga
ParticipantePensei 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;
/13 de agosto de 2010 às 3:56 pm #95521jspaulonci
ParticipanteBom 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
13 de agosto de 2010 às 4:52 pm #95523Ishii
ParticipanteOlá,
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 -
AutorPosts
- Você deve fazer login para responder a este tópico.