我需要使用用户usr1的dbms_lock.sleep过程。我无法以sys身份登录,但我有一个能够拥有“授予任何对象特权”权限的usr2用户密码。然而,当我作为usr2登录并尝试发出命令时
grant execute on sys.dbms_lock to usr1
我遇到了ORA-01031“权限不足”的异常。在另一个用户的测试包中可以正常工作。系统包是否被特别处理,或者是我漏掉了什么?
我需要使用用户usr1的dbms_lock.sleep过程。我无法以sys身份登录,但我有一个能够拥有“授予任何对象特权”权限的usr2用户密码。然而,当我作为usr2登录并尝试发出命令时
grant execute on sys.dbms_lock to usr1
我遇到了ORA-01031“权限不足”的异常。在另一个用户的测试包中可以正常工作。系统包是否被特别处理,或者是我漏掉了什么?
因此,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
授予权限。
dbms_lock
的执行权限,因为 SYS 无法这样做。SYS
绝对可以授予dbms_lock
的执行权限,显然必须授予usr2
,否则会出现未知表错误而不是权限不足。其他包也会发生同样的情况,而不仅仅是这一个。虽然我还没有在任何地方找到它的文档,但似乎SYS
对象有另一层保护;这似乎并不完全不合理。有趣。 - Alex Poolegrant execute on sys.dbms_lock to usr1
,那么看起来不是SYS有问题,而是用户usr1有问题。因此,你的假设是错误的,结论也就毫无用处了。在这个问题的另一个答案中,解释了这是数据库的预期行为。 - miracle173
dbms_session
添加sleep
过程来解决此问题。 - William Robertson