- Este tópico contém 5 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 6 meses atrás por
burga.
-
AutorPosts
-
6 de setembro de 2010 às 10:06 pm #95947
airoosp
ParticipanteBoa tarde,
Alguém sabe se é possível atribuir permissão para que um usuário possa alterar apenas as triggers de um outro usuário.
Por exemplo o usuário A tem uma tabela de CADASTRO e a mesma uma trigger. O objetivo é permitir que o usuário B possa alterar e recompilar apenas a trigger vincula à tabela CADASTRO do usuário A.
Se é utilizado o grant create any trigger to B este usuário poderá acessar e recompilar qualquer trigger do banco, certo?
Banco 9i.
Obrigado.
Airton
8 de setembro de 2010 às 6:33 am #95963Ishii
ParticipanteOlá,
Difícil isso, pois seria necessário rever os grants e roles desse usuário. O grant any trigger permitiria criar qualquer trigger mesmo em outros schemas. Como a versão é 9i talvez usar uma trigger de DDL no schema (usuário B quando alterar objetos que não a trigger do usuário A), pode ser uma estratégia, mas mesmo assim precisaria de alguns testes.
[]s Ishii
8 de setembro de 2010 às 9:42 pm #95973jspaulonci
ParticipanteConceda os dois grants abaixo para o owner que vc quer que altere trigger do outro owner.
ALTER ANY TRIGGER
CREATE ANY TRIGGER8 de setembro de 2010 às 11:52 pm #95985CleitonHanzen
ParticipanteOpá….
João, mas com estes privilégios o usuário conseguirá alterar em qualquer outro schema do banco, o que abre uma brecha de segurança.
Airton, o conceito de multi-usuário no banco existe para “DADOS” o que é “METADADOS” somente pode ser manipulado pelo próprio dono (owner) e pelos usuários “administradores” (que aí sim possuem os privilégios alter/create any trigger).
O que pode ser feito para “contornar” é desenvolver uma “trigger” de DDL em nível de banco que checa se o usuário que está fazendo o ALTER tem a “permissão” para alterar ou não estes objetos. Mas aí é uma implementação e um controle seu…. 😉9 de setembro de 2010 às 3:46 pm #95992jspaulonci
ParticipanteBom pessoal fiz uns testes aqui mas andei muito não , bom no seu caso eu recomendo vc dar o grant de create any trigger e alter any trigger e assegurar que somente pessoas autorizadas terão acesso com esse owner no banco, acho mais fácil e barto doque vc criar uma rotina e tal.
9 de setembro de 2010 às 5:23 pm #96002burga
ParticipanteSobre a trigger de DDL que o pessoal está falando, seria mais ou menos assim:
GRANT ALTER ANY TRIGGER TO SEU_USUARIO;
GRANT CREATE ANY TRIGGER TO SEU_USUARIO;create or replace
TRIGGER "SYS"."NOME_DA_TRIGGER"
BEFORE DDL ON DATABASE
BEGIN
IF (ora_login_user IN ('SEU_USUARIO') AND ora_login_user != ora_dict_obj_owner)
THEN
IF (ora_sysevent IN ('CREATE','ALTER') AND (ora_dict_obj_type NOT IN ('TRIGGER') OR ora_dict_obj_owner NOT IN ('ESQUEMA_DA_TRIGGER')))
THEN
RAISE_APPLICATION_ERROR(-20000, 'Usuário não tem permissão para realizar esta operação');
END IF;
END IF;
END;
/Mas é bom testar porque eu fiz às pressas e não testei aqui, pode ter algum errinho na lógica, mas o caminho é esse aí… Eu uso este tipo de trigger mais pra gerar um histórico das DDLs executadas no banco, nunca usei para este tipo de problema…
-
AutorPosts
- Você deve fazer login para responder a este tópico.