ORA-01031: Unzureichende Berechtigungen auf “SYS.DBMS_SESSION", wenn Sie ein Paket auf 11g

Habe ich ein Paket mit einem Verfahren zum erstellen von Kontext und setzen Sie den Wert auf Kontext. Es funktioniert sehr gut, auf 10g aber auf 11g bekomme ich den folgenden Fehler auch mit einer DBA-Rolle werden.

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

Das Paket ist aufgebaut wie folgt:

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

Und den Körper:

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;

Wird es so aufgerufen

  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;

wird der Kontext verwendet werden, aus mehreren gespeicherten Prozeduren. Wie man diese arbeiten auf beiden Plattformen????

Als Ergänzung hier die privilegs der schema-Benutzer:

system-Privileg 10g, wo es funktioniert:

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 

Habe ich versucht, dieses privilegs auf 11g-aber es hat nicht funktioniert. Also gab ich den schema-Benutzer mit der Rolle DBA. Aber das hat nicht funktioniert auch.

  • Hat der aufrufende Benutzer haben EXECUTE auf DBMS_SESSION?
  • Ich habe das problem gelöst. Das privilegs des Benutzers sind nicht das problem. Ich hatte zum initialisieren der Kontext in jedem Aufruf Speichert der Verfahren. EXECUTE IMMEDIATE 'CREATE or REPLACE context-parameter mit DYNAMICSQL_CONTEXT';
InformationsquelleAutor | 2015-05-08
Schreibe einen Kommentar