在授予调用正在调用包的包的权限的情况下,可能会缺少哪些特权?
What privileges could be missing in the case of granted permission to call a package that is calling a package?
很遗憾,我无法提供任何代码,但我会尽力解释,并会根据需要提供其他信息。
在此场景中有 3 种不同的模式在起作用:X_SCHM、APPS 和 HR
APPS 有一个名为 X_PKG 的程序包,用于 运行 资源的某些功能,并且 X_PKG 还调用了程序包 HR_EMPLOYEE_API 中的过程,该过程由人力资源架构。 APPS将X_PKG的执行权限授予X_SCHM,X_SCHM可以成功调用X_PKG.
内的过程
但是,我想从 APPS 转移到 X_SCHM,所以 X_PKG 的包主体被复制到 [=25= 中的新 X2_PKG ]. X2_PKG 仍然需要调用 HR_EMPLOYEE_API 中的过程,因此授予 X_SCHM 执行该程序包的权限。
现在当X_SCHM试图调用X2_PKG时,它在APPS拥有的所有账户都与X_PKG相同,它成功进入HR拥有的HR_EMPLOYEE_API然后启动 运行ning 进入其中的 "table or view does not exist" 错误,APPS 或 X_SCHM 运行ning X_PKG 属于 APPS 的问题不会 运行 进入.
我不确定这是否是需要提供额外资助的问题。我认为由于 X_SCHM 对 HR_EMPLOYEE_API 具有执行权限,它从 HR_EMPLOYEE_API 调用的过程将能够访问 HR 拥有的表,除非我缺少有关需要自己的包的信息授予的特权与拥有它们的模式分开。
请告诉我哪里可以更清楚或提供更多信息来解决这个问题。
包 HR_EMPLOYEE_API 定义为 AUTHID CURRENT_USER。这意味着包内的所有代码都作为调用它的用户执行。所以基本上你有 3 个选择:
1) 您按照@Sudipta Mondal 的建议将包留在APPS 用户中。这听起来是最安全的选择。
2) 如果X2_PKG 被定义为AUTHID DEFINER,您可以尝试将APPS 中的所有直接权限复制到X_SCHM 并希望获得最佳结果。但它真的不是那么好,因为我很确定APPS有很多权利。幸运的是,您不必为通过角色获得的权限而烦恼,因为它们不适用于包。尝试类似的东西
select 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO X_SCHM;' FROM DBA_TAB_PRIVS WHERE GRANTEE = 'APPS';
3) 尝试通过反复试验或从 DBA_DEPENDENCIES 中获取它们(如果它们被引用)来找出要添加的权限:
select REFERENCED_OWNER, REFERENCED_TYPE, REFERENCED_NAME from dba_dependencies where NAME = 'HR_EMPLOYEE_API';
我个人同意 Sudipta Mondal,如果不是强制性的,你应该重新考虑移动它。
很遗憾,我无法提供任何代码,但我会尽力解释,并会根据需要提供其他信息。
在此场景中有 3 种不同的模式在起作用:X_SCHM、APPS 和 HR
APPS 有一个名为 X_PKG 的程序包,用于 运行 资源的某些功能,并且 X_PKG 还调用了程序包 HR_EMPLOYEE_API 中的过程,该过程由人力资源架构。 APPS将X_PKG的执行权限授予X_SCHM,X_SCHM可以成功调用X_PKG.
内的过程但是,我想从 APPS 转移到 X_SCHM,所以 X_PKG 的包主体被复制到 [=25= 中的新 X2_PKG ]. X2_PKG 仍然需要调用 HR_EMPLOYEE_API 中的过程,因此授予 X_SCHM 执行该程序包的权限。
现在当X_SCHM试图调用X2_PKG时,它在APPS拥有的所有账户都与X_PKG相同,它成功进入HR拥有的HR_EMPLOYEE_API然后启动 运行ning 进入其中的 "table or view does not exist" 错误,APPS 或 X_SCHM 运行ning X_PKG 属于 APPS 的问题不会 运行 进入.
我不确定这是否是需要提供额外资助的问题。我认为由于 X_SCHM 对 HR_EMPLOYEE_API 具有执行权限,它从 HR_EMPLOYEE_API 调用的过程将能够访问 HR 拥有的表,除非我缺少有关需要自己的包的信息授予的特权与拥有它们的模式分开。
请告诉我哪里可以更清楚或提供更多信息来解决这个问题。
包 HR_EMPLOYEE_API 定义为 AUTHID CURRENT_USER。这意味着包内的所有代码都作为调用它的用户执行。所以基本上你有 3 个选择:
1) 您按照@Sudipta Mondal 的建议将包留在APPS 用户中。这听起来是最安全的选择。
2) 如果X2_PKG 被定义为AUTHID DEFINER,您可以尝试将APPS 中的所有直接权限复制到X_SCHM 并希望获得最佳结果。但它真的不是那么好,因为我很确定APPS有很多权利。幸运的是,您不必为通过角色获得的权限而烦恼,因为它们不适用于包。尝试类似的东西
select 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO X_SCHM;' FROM DBA_TAB_PRIVS WHERE GRANTEE = 'APPS';
3) 尝试通过反复试验或从 DBA_DEPENDENCIES 中获取它们(如果它们被引用)来找出要添加的权限:
select REFERENCED_OWNER, REFERENCED_TYPE, REFERENCED_NAME from dba_dependencies where NAME = 'HR_EMPLOYEE_API';
我个人同意 Sudipta Mondal,如果不是强制性的,你应该重新考虑移动它。