运行使用其他架构的用户 Oracle 过程



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

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

运行上述示例将引发异常,要求授予用户 A 更新用户 B 表的权限。

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

而不授予用户 A 对所有用户 B 对象的访问权限

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

grant select on all userA tables to userB;

您必须单独授予对每个对象的权限。

因此,您的问题的答案很简单:仅向其他用户授予所需对象的所需权限,例如

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

最新更新