SET_CONTEXT ORA-01031: 权限不足

过程就这样:
create or replace package body parp_set_user_pkg is
procedure set_user_id(user_id varchar2)
is
begin
    DBMS_SESSION.SET_CONTEXT('ctx_parp_set_user','user_id',user_id);
end set_user_id;


FUNCTION get_user_id RETURN VARCHAR2 IS
  v_user_id VARCHAR2(200);
BEGIN
    SELECT SYS_CONTEXT('ctx_parp_set_user','user_id') INTO v_user_id FROM DUAL;
  IF v_user_id IS NULL THEN
    SELECT USER INTO v_user_id FROM DUAL;
  END IF;
RETURN v_user_id;
end get_user_id;


end parp_set_user_pkg;


调用的时候总是报权限不足:
--- Cause: java.sql.SQLSyntaxErrorException: ORA-01031: 权限不足
ORA-06512: 在 "SYS.DBMS_SESSION", line 101
ORA-06512: 在 "PARPDATA.PARP_SET_USER_PKG", line 5
ORA-06512: 在 line 1


处理过程:
因为报的是SYS.DBMS_SESSION不足,所以授予了这个的执行权限!
SQL> grant execute on sys.DBMS_SESSION to parpdata;


Grant succeeded.
but还是不行,赶紧崩溃啊!明明报这个权限不足,授权了还是没有权限!
然后把另外一个库data的权限copy了一份应用到这个库上,还是不行。。
仔细在看了下过程,有set_context,是不是这个的问题呢?
在建立上下文的时候指定了PACKAGE,此后设置上下文或清除上下文设置都需要通过这个包的过程来完成,如果直接尝试调用SET_CONTEXT或CLEAR_CONTEXT则会报错权限不足:


SQL> CREATE OR REPLACE CONTEXT CTX_PARP_SET_USER
  2   USING PARPDATA.PARP_SET_USER_PKG
  3  /


Context created.   
context的名字可以随便取,但是using后面的必须是package的名字。而且如果不是在相同用户下上属主才行。


至少需要的权限:
GRANTEE      PRIVILEGE             ADM 
-----------  -----------------     ---- 
SCOTT        DROP ANY CONTEXT      NO 
SCOTT        CREATE ANY CONTEXT    NO 
SCOTT        UNLIMITED TABLESPACE  NO 
SCOTT        ALTER SESSION         NO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值