Pular para o conteúdo
  • Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 2 meses atrás por leandrolbs.
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #97747
    leandrolbs
    Participante

      Boa 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?

      #97750
      Sousa04
      Participante

        conceder apenas o grant de select não resolve?

        se for 11g vc pode tornar essa tabela read only

        #97753
        leandrolbs
        Participante

          Quando 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.

          #97755
          Sousa04
          Participante

            infelizmente 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;
            /

            #97762
            leandrolbs
            Participante

              obrigado pela ajuda, mais não quero tratar cada tabela com 1 trigger, pois possuo 1500 tabelas.

              #97763
              CleitonHanzen
              Participante

                Opá….

                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 retornado

                  ELSE
                
                  END IF;
                

                END;

                #97765
                leandrolbs
                Participante

                  Muito 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.

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