oracle sys.dbms_lock,关于特权:如何授予对Oracle中的dbms_lock执行的权限?

我需要使用用户usr1中的dbms_lock.sleep过程。 我无法以sys身份登录,但是我有用户usr2的密码,该用户具有"授予任何对象特权"特权。 但是,当我以usr2身份登录并尝试发出

grant execute on sys.dbms_lock to usr1

我收到ORA-01031"权限不足"异常。 另一个用户的测试包也是如此。 系统软件包是否经过特殊处理,或者我错过了什么?

Oracle承诺通过在dbms_session中添加sleep过程来解决此问题。

根据初始化参数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的访问权限。

刚刚偶然发现了这个旧答案,该答案显示了dbms_lock周围的包装。

听起来好像SYS没有被授予DBA角色,或者SYS没有GRANT ANY OBJECT特权。引用文档

To grant an object privilege, you must own the object, or the owner of

the object must have granted you the object privileges with the GRANT

OPTION, or you must have been granted the GRANT ANY OBJECT PRIVILEGE

system privilege. If you have the GRANT ANY OBJECT PRIVILEGE, then you

can grant the object privilege only if the object owner could have

granted the same object privilege.

这意味着您不能授予对dbms_lock的执行权限,因为SYS无法做到这一点。

在安装时,会自动为SYS授予DBA角色,因此可能有人正在更改此权限或创建了另一个具有DBA角色的用户。

无论哪种方式,如果您只能访问这两个用户,则都必须使您的DBA参与其中。要求他们将需要的包上的执行授予需要的用户。由他们决定给您一个充分的理由,为什么他们不会授予您执行所需工作的程序包的执行权。

如果您不能完全访问dbms_lock,则始终可以在另一个用户中创建包装您需要的dbms_lock.sleep的过程,然后单独授予对该过程的执行。

我看到相同的东西(11gR2); 但是SYS绝对可以授予对dbms_lock执行的权限,并且显然必须将其授予usr2,否则将获得未知的表错误而不是特权不足。 其他软件包也会发生同样的事情,而不仅仅是那个。 尽管我还没有发现任何地方的文档,但是看来SYS对象具有另一层保护; 我想这并不是完全不合理的。 有趣。

我会检查您说的话,但是我认为用户可以始终将自己的包中的执行授予任何人,不是吗?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值