如何在Oracle中为dbms_lock授予执行权限?

Tom*_*Żuk 12 oracle privileges

我需要使用用户usr1的dbms_lock.sleep过程.我无法以sys身份登录,但我有一个用户usr2的密码,该密码具有"grant any object privilege"权限.但是,当我以usr2身份登录并尝试发布时

grant execute on sys.dbms_lock to usr1
Run Code Online (Sandbox Code Playgroud)

我得到了ORA-01031"权限不足"的例外情况.同样适用于另一个用户的测试包.系统包是专门处理的,还是我错过了什么?

Ale*_*ole 11

系统包经过特殊处理,具体取决于初始化参数的值O7_DICTIONARY_ACCESSIBILITY.如果是FALSE,这是Oracle 9i以来的默认设置,则ANY权限不适用于数据字典.文档将其称为"字典保护".

我在安全指南中找到的最接近的 - 这里这里 - 仅作为示例引用表格.

但是,Oracle支持说明174753.1明确声明字典保护取代grant any object privilege.我不允许引用它,但它解释了你所看到的; 如果您可以访问它,可能值得查找.

因此,usr2能够做到的唯一方法grant execute on sys.dbms_lock to usr1就是让DBA完成grant execute on sys.dbms_lock to usr2 with grant option.

正如Ben所说,你必须让DBA usr1直接授予权限,或者将with grant option权限添加到授予的权限中usr2; 或者usr2围绕dbms_lock调用创建一个包装程序,并为其授予权限usr1.