我需要从用户usr1使用dbms_lock.sleep过程.我不能以sys身份登录,但是我有一个用户usr2的密码,它们具有“授予任何对象权限”权限.但是,当我以usr2登录并尝试发布
grant execute on sys.dbms_lock to usr1
我得到ORA-01031“权限不足”异常.与其他用户的测试包相同.系统包是否被特别处理,还是我错过了什么?
根据初始化参数O7_DICTIONARY_ACCESSIBILITY的值,系统包被特别处理.如果这是FALSE,这是Oracle 9i之后的默认值,那么任何权限都不适用于数据字典.文件称之为“字典保护”.
在安全指南here和here中可以找到的最接近的仅仅是以表为例.
然而,Oracle支持说明174753.1明确声明字典保护取代了任何对象权限.我不能引用,但它解释了你所看到的;如果您有访问权限,可能需要查询.
所以,usr2能够将sys.dbms_lock的执行授予usr1的唯一方法是让DBA通过grant选项在sys.dbms_lock到usr2上执行grant执行.
正如Ben所说,你必须要求DBA直接授予usr1的权限,或者将授予选项添加到授予usr2的权限;或者让usr2围绕dbms_lock调用创建一个包装程序,并将权限授予usr1.