【发布时间】: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 从应用程序代码运行他自己的自定义查询的一种安全方法。
【问题讨论】: