Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #95060
    radu
    Participante

      Boa tarde sras e srs,

      Estou com um problema e quebrei bastante a cabeça fazendo diversas pesquisas…

      Fiz a seguinte procedure:

      CREATE OR REPLACE PROCEDURE SP_TESTE01
      IS

      BEGIN
      EXECUTE IMMEDIATE ‘CREATE TABLE TESTE (id CHAR)’;
      END;

      Porém, quando eu executo a procedure, o seguinte erro se sucede:

      ORA-01031: privilégios insuficientes
      ORA-06512: em “SIGA.SP_TESTE01”, line 5
      ORA-06512: em line 2

      Agora, vem o ponto que me deixou muito perturbado: Quando eu executo o CREATE TABLE diretamente, sem ser pela procedure, o erro não aparece.

      O que posso fazer?

      att

      Radu

      #95066
      fsitja
      Participante

        Olá Radu,

        O problema acontece porque Stored Procedures e Functions, como comportamento padrão, executam com os privilégios do OWNER da procedure, que é o usuário que criou ela. Esse comportamento é chamado de Definer’s Rights (DR).

        Portanto, para funcionar, você tem duas opções:

        1) modificar esse comportamento padrão, definindo a procedure para executar com os privilégios do próprio usuário que está invocando a procedure, chamado de Invoker’s Rights. Para isso se usa a cláusula de AUTHID:

        CREATE OR REPLACE PROCEDURE SP_TESTE01 AUTHID CURRENT_USER
        IS
        BEGIN
        EXECUTE IMMEDIATE 'CREATE TABLE TESTE (id CHAR)';
        END;

        Essa é uma solução, porém assume que o usuário executando possua o system privilege de create table.

        2) Se não for o caso, e você quiser realmente usar a procedure para “emprestar” esse privilégio, você não pode ter o system privilege de create table atribuído por ROLE. Ele precisa ser um grant direto ao usuário SIGA, que é o Owner da procedure/function.


        grant create table to siga;

        A partir de um sysdba.

        #95071
        radu
        Participante

          fsitja, muito obrigado, faltou o AUTHID, mesmo…

          Mais uma que aprendi..

          Att
          Radu

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