ORA-01031: privilèges insuffisants à “SYS.DBMS_SESSION” lors de l'utilisation d'un package sur 11g

J'ai un forfait avec une procédure pour créer le contexte et définir la valeur de contexte. Il fonctionne très bien sur 10g mais sur 11g j'obtiens l'erreur suivante aussi avec le rôle de DBA.

ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SESSION", line 101
ORA-06512: at "REDIS_DATA.DYNAMICSQL_CONTEXT", line 7
ORA-06512: at "REDIS_DATA.FESTSTELLUNG_GETOVERVIEW", line 99

Le paquet est construit comme suit:

-- DYNAMICSQL_CONTEXT specification
CREATE OR REPLACE PACKAGE REDIS_DATA.DYNAMICSQL_CONTEXT 
 AS
 PROCEDURE CONTEXT_SETPARAM(p_name  IN VARCHAR2,
                         p_value IN VARCHAR2);
END DYNAMICSQL_CONTEXT;

Et le corps:

CREATE OR REPLACE PACKAGE BODY REDIS_DATA.DYNAMICSQL_CONTEXT 
  IS
  PROCEDURE CONTEXT_SETPARAM(p_name  IN VARCHAR2,
                             p_value IN VARCHAR2)
    IS
    BEGIN
      DBMS_SESSION.SET_CONTEXT('parameter', p_name, p_value);
    END CONTEXT_SETPARAM;
END DYNAMICSQL_CONTEXT;

Il sera appelé comme ça

  IF p_ISTADMIN = 0
  THEN
      DYNAMICSQL_CONTEXT.CONTEXT_SETPARAM('pREVISORID', p_REVISORID);
      p__wherePart := p__wherePart || 'AND ((p.ISSECURE = 1 AND p.ID IN (select PARENTOBJECT from PRUEFUNG_BETEILIGTE where PROPERTY = SYS_CONTEXT(''parameter'', ''pREVISORID''))) OR (p.ISSECURE = 0)) ';
  END IF;

le contexte sera utilisé à partir de plusieurs procédures stockées. Comment construire que cela fonctionne sur les deux plates-formes????

Comme ailleurs ici le privilegs de l'utilisateur de schéma:

système de privilège sur 10g où il travaille:

ALTER SESSION  
CREATE ANY CONTEXT 
CREATE CLUSTER 
CREATE INDEXTYPE 
CREATE OPERATOR 
CREATE PROCEDURE 
CREATE SEQUENCE 
CREATE SESSION 
CREATE SYNONYM 
CREATE TABLE 
CREATE TRIGGER N 
CREATE TYPE N 
CREATE VIEW N 
DEBUG ANY PROCEDURE N 
DEBUG CONNECT SESSION 

J'ai essayé ce privilegs sur 11g, mais cela n'a pas fonctionné. Donc j'ai donné le schéma de l'utilisateur le rôle DBA. Mais cela ne fonctionne pas aussi.

  • L'utilisateur appelant ont EXECUTE sur DBMS_SESSION?
  • J'ai résolu le problème. Le privilegs de l'utilisateur ne sont pas le problème. J'ai eu pour initialiser le contexte de l'appel de Procédures stockées. EXÉCUTION IMMÉDIATE "CRÉER OU de REMPLACER le paramètre de contexte à l'aide de DYNAMICSQL_CONTEXT';
InformationsquelleAutor | 2015-05-08