ORA-01031:在11g上使用软件包时,“SYS.DBMS_SESSION”的权限不足

时间:2015-05-08 11:16:04

标签: oracle11g oracle10g ora-01031

我有一个包含一个创建上下文的过程并将值设置为上下文的包。它在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上尝试过这个特权,但它没有用。所以我给架构用户提供了角色DBA。但这也不起作用。

1 个答案:

答案 0 :(得分:0)

我几天前也面对同样的问题,但解决方法却有所不同。就我而言,调用数据库用户需要具备所有权限,包括EXECUTEDBMS_SESSION。 如果您创建CONTEXT,则无需每次都创建或初始化。请参阅下面的示例声明:

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