Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #95947
    airoosp
    Participante

      Boa 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

      #95963
      Ishii
      Participante

        Olá,

        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

        #95973
        jspaulonci
        Participante

          Conceda os dois grants abaixo para o owner que vc quer que altere trigger do outro owner.

          ALTER ANY TRIGGER
          CREATE ANY TRIGGER

          #95985
          CleitonHanzen
          Participante

            Opá….

            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…. 😉

            #95992
            jspaulonci
            Participante

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

              #96002
              burga
              Participante

                Sobre 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…

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