Oracle11g ORA-01031:在“上的权限不足”;SYS.DBMS“U会话”;在11g上使用软件包时

Oracle11g ORA-01031:在“上的权限不足”;SYS.DBMS“U会话”;在11g上使用软件包时,oracle11g,oracle10g,ora-01031,Oracle11g,Oracle10g,Ora 01031,我有一个程序包,用于创建上下文并将值设置为context。它在10g上运行得很好,但在11g上,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", lin

我有一个程序包,用于创建上下文并将值设置为context。它在10g上运行得很好,但在11g上,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
包的构建如下所示:

-- 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;
和机构:

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;
它将被称为这样

  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;
上下文将从几个存储过程中使用。如何在这两个平台上都能工作

在此添加模式用户的权限:

在10g上工作的系统权限:

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 

我在11g上试过这个privilegs,但没用。所以我给了模式用户DBA角色。但这也不起作用。

几天前我也面临同样的问题,但解决问题的方式有所不同。在我的例子中,调用DB用户拥有所需的所有特权,包括
EXECUTE
DBMS\u SESSION
。 如果像下面这样创建
上下文
,则不需要每次都创建或初始化。请参见下面的示例声明:

CREATE OR REPLACE CONTEXT parameter USING DYNAMICSQL_CONTEXT **ACCESSED GLOBALLY**;

呼叫用户是否在
DBMS\u会话上执行
EXECUTE
?我解决了这个问题。用户的特权不是问题。我必须在每个调用存储过程中初始化上下文。执行立即“使用DYNAMICSQL_上下文创建或替换上下文参数”;