我有一个包含一个创建上下文的过程并将值设置为上下文的包。它在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。但这也不起作用。
答案 0 :(得分:0)
我几天前也面对同样的问题,但解决方法却有所不同。就我而言,调用数据库用户需要具备所有权限,包括EXECUTE
和DBMS_SESSION
。
如果您创建CONTEXT
,则无需每次都创建或初始化。请参阅下面的示例声明:
CREATE OR REPLACE CONTEXT parameter USING DYNAMICSQL_CONTEXT **ACCESSED GLOBALLY**;