1

我有一个包含创建上下文并将值设置为上下文的过程的包。它在 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。但这也不起作用。

4

1 回答 1

1

几天前我也面临同样的问题,但解决的方式有点不同。就我而言,调用 DB 用户具有所需的所有权限,包括EXECUTEDBMS_SESSION. CONTEXT如果您像下面这样创建,则不需要每次都创建或初始化。请参阅下面的示例语句:

CREATE OR REPLACE CONTEXT parameter USING DYNAMICSQL_CONTEXT **ACCESSED GLOBALLY**;
于 2016-03-28T22:07:42.160 回答