【问题标题】:Privileges for invoking procedure of other schema in a procedure in Oracle 10gR2Oracle 10gR2过程中调用其他模式过程的权限
【发布时间】:2014-07-21 18:28:27
【问题描述】:

Oracle 10gR2 中是否有特权,可以通过角色授予用户在他们自己的过程和函数中执行一个特定模式的所有包的任何过程/函数?例如,模式“user1”、“user2”、“user3”应该被授予一个角色,它可以在为该模式创建的过程下调用模式“produser”的过程。

有一个“GRANT EXECUTE ON ANY PROCEDURE”系统级权限,但这太强大了。如果一个包的权限被明确授予用户(即“GRANT EXECUTE ON produser.package_1 TO user1”),它可以工作,但它不是动态的,并且希望拥有基于角色的权限。

我希望有人可以帮助我。如果有什么不清楚的地方,请告诉我。

提前谢谢你:)

【问题讨论】:

    标签: oracle10g privileges


    【解决方案1】:

    没有任何方法可以使用内置角色或权限来做到这一点,不。您需要创建自己的角色并将其授予您的用户:

    create role prod_access;
    grant prod_access to user1;
    grant prod_access to user2;
    ...
    

    然后为您现有的所有包授予该角色权限,或者至少为您希望公开的那些包授予权限:

    grant execute on produser.package_1 to prod_access;
    

    每当您添加一个新的包时,部署的一部分就是将其执行权限授予角色。如果/当您添加新用户时,请授予他们您的角色作为他们创建的一部分。

    【讨论】:

    • 试过这个,但由于某种原因,它没有赋予架构在它自己的方法中执行这些方法的特权。不过,单独调用其他模式的方法效果很好。
    • @user3861781 - 如果我理解你的意思,那是定义者与调用者的正确问题,因为默认情况下存储过程中不提供来自角色的权限。 Read more in the answers to this question.
    • 你是对的。找到了它的 Oracle 指南:docs.oracle.com/database/121/DBSEG/dr_ir.htm#DBSEG947。谢谢你的回答。可惜没有一种巧妙的方式来授予这些特权。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多