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
surDBMS_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';
Vous devez vous connecter pour publier un commentaire.
J'ai moi aussi été confrontés à la même quelques jours en arrière, mais le résoudre peu différemment. Dans mon cas, l'appel de DB utilisateur a tous les privilèges requis, y compris
EXECUTE
etDBMS_SESSION
.Vous n'avez pas besoin de créer ou d'initialiser chaque fois, si vous créez
CONTEXT
comme suit. Pls voir l'exemple de l'énoncé ci-dessous: