【问题标题】:Run A User Oracle Procedure That Uses Other Schema运行使用其他模式的用户 Oracle 过程
【发布时间】:2019-12-12 18:39:48
【问题描述】:

假设 UserA 创建了一个名为 SomeProc 的 Oracle 11g 过程,SomeProc 对 UserB 模式执行 DML/DDL 查询,如何在不授予 UserA 对 UserB 所需对象的访问权限的情况下完成此操作?示例:

CREATE OR REPLACE Procedure UserA.SomeProc IS
BEGIN
UPDATE UserB.SomeTable SET SomeField = 1;
END;

运行上面的示例将抛出异常,要求授予 UserA 更新 UserB 表。

我的问题的想法是,我不希望 UserA 能够直接从应用程序代码中从 UserB 模式中选择 TABLE,相反,UserA 应该只能执行他自己的过程,而该过程本身就是可以访问 UserB 对象,这是我们需要避免 UserA 从应用程序代码运行他自己的自定义查询的一种安全方法。

【问题讨论】:

    标签: oracle oracle11g


    【解决方案1】:

    不授予 UserA 对所有 UserB 对象的访问权限

    你很幸运,这正是它的工作原理。您不能授予对所有对象的权限;没有(例如)

    grant select on all userA tables to userB;
    

    您必须分别授予每个对象的权限。

    因此,您的问题的答案很简单:仅将所需对象的所需权限授予另一个用户,例如

    grant select                 on dept to userb;
    grant select, insert, update on emp  to userb;
    

    【讨论】:

    • 其实这是现在正在使用的技术,我并不是说“所有对象”都授予所有对象,我的意思是授予每个所需对象的麻烦。我的问题的想法是,我不希望 UserA 能够直接从应用程序代码中从 UserB 模式中选择 TABLE,相反,UserA 应该只能执行他自己的过程,而该过程本身就是可以访问 UserB 对象,这是我们需要避免 UserA 从应用程序代码运行他自己的自定义查询的一种安全方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2011-01-19
    • 2012-11-05
    • 2010-09-16
    • 2013-09-07
    相关资源
    最近更新 更多