- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 2 meses atrás por
leandrolbs.
-
AutorPosts
-
17 de janeiro de 2011 às 10:13 pm #97747
leandrolbs
ParticipanteBoa Tarde, quero criar uma trigger que block qualquer insert, update or delete no banco de dados, porem quero deixar o sistema para consulta.
Já testei varios tipos mais não consegui, não queria montar script para cada tabela visto que possuo 1500 tabelas.
create or replace trigger TG_BLK_AIUD_ALL_SYSTEM
before insert or update or delete on TODAS_AS_TABELAS
for each row
begin
raise_application_error(-20100, 'Manutenção em cadastros está inativo, ');
rollback;
end TG_BLK_AIUD_ALL_SYSTEM;
Com base no script acima alguem tem alguma idéia?
17 de janeiro de 2011 às 10:36 pm #97750Sousa04
Participanteconceder apenas o grant de select não resolve?
se for 11g vc pode tornar essa tabela read only
17 de janeiro de 2011 às 11:01 pm #97753leandrolbs
ParticipanteQuando ao acesso eu fiz e funcionou:
revoke DELETE ANY TABLE from RL_US;
revoke INSERT ANY TABLE from RL_US;
revoke UPDATE ANY TABLE from RL_US;
porem a mensagem não é clara para o usuário. não consigo desenv um trigger com a minha necessidade?.
vlw.
17 de janeiro de 2011 às 11:46 pm #97755Sousa04
Participanteinfelizmente estou sem ambiente algum para testar
acho q aqui estou dando um norte
CREATE OR REPLACE TRIGGER BLOQUEIA
BEFORE INSERT OR UPDATE OR DELETE ON employes
BEGIN
IF DELETING THEN
RAISE_APPLICATION_ERROR (-20500,’Voce nao pode
deletar’);
ELSIF INSERTING THEN
RAISE_APPLICATION_ERROR (-20502,’Você nao pode
inserir’);
ELSIF UPDATING THEN
RAISE_APPLICATION_ERROR (-20504,’Você nao pode
alterar’);
ELSE
RAISE_APPLICATION_ERROR (-20506,’Você só pode
Fazer alterações quando o adm quiser’);
END IF;
END IF;
END;
/18 de janeiro de 2011 às 2:08 pm #97762leandrolbs
Participanteobrigado pela ajuda, mais não quero tratar cada tabela com 1 trigger, pois possuo 1500 tabelas.
18 de janeiro de 2011 às 2:27 pm #97763CleitonHanzen
ParticipanteOpá….
Não sou especialista em PL/SQL…rsrsrsrsrsrs…. mas lembro que tem alguma coisa sobre trigger em nível de banco que podem tratar erros específicos, isso tem até na documentação oficial da Oracle:
Exemplo:
CREATE TRIGGER log_errors AFTER SERVERERROR ON DATABASE
BEGIN
IF (IS_SERVERERROR (1017)) THEN –> Trocar pelo o erro retornadoELSE END IF;END;
18 de janeiro de 2011 às 4:53 pm #97765leandrolbs
ParticipanteMuito obrigado pela ajuda me deu ideia para outros processos.
quando a troca de mensagens, eu não consegui troca-la apenas adicionar uma nova mensagem junto a msg padrão do Oracle.
CREATE or replace TRIGGER log_errors
after SERVERERROR ON DATABASE
BEGIN
IF (IS_SERVERERROR(1017)) THEN
raise_application_error(-20001,
'Você está digitando usuário e senha inválido. ' ||
chr(10) || SQLERRM(ora_server_error(1)) ||
chr(10) || ora_server_error_msg(1));
END IF;
END;
Teria um exemplo funcionando? obrigado.
-
AutorPosts
- Você deve fazer login para responder a este tópico.