2017-07-26 106 views
0

不幸的是我不能提供任何代码,但我会尽可能地尽力解释,并会根据需要提供其他信息。授予权限调用正在调用包的包的权限可能会丢失哪些权限?

有3种不同的模式,在这种情况下打法:X_SCHM,应用程序和HR

APPS有一个叫做X_PKG为一个资源上运行一些功能包,X_PKG也使得调用封装程序HR模式拥有HR_EMPLOYEE_API。 APPS授予对X_PKG执行特权到X_SCHM,并且X_SCHM可以成功调用X_PKG内的过程。但是,我想从APPS移动到X_SCHM,因此将X_PKG的包体复制到X_SCHM中的新X2_PKG。 X2_PKG仍需要调用HR_EMPLOYEE_API中的过程,因此授予X_SCHM以执行该程序包。

现在,当X_SCHM尝试调用X2_PKG(它与所有由APPS拥有的X_PKG相同的帐户)时,它成功地输入HR拥有的HR_EMPLOYEE_API,然后开始跑入其中的“表或视图不存在”错误,运行APPS拥有的X_PKG的APPS或X_SCHM未遇到问题。

我不确定这是否需要额外补助金的问题。我想可能是因为X_SCHM在HR_EMPLOYEE_API上执行特权,HR_EMPLOYEE_API调用的过程将能够访问HR拥有的表,除非我缺少关于需要他们自己授予的特权的包的信息,而这些信息与拥有它们的特征是分开的。

请让我知道我可以更清楚的地方或提供更多信息来解决此问题。

+0

是与Oracle电子商务套件相关,然后善意标记。 –

+0

现在已经这样做了。 – stumpbeard

+2

您是否使用'AUTHID CURRENT_USER'或'AUTHID DEFINER'(默认)子句创建了这些过程? – krokodilko

回答

2

软件包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,如果不是强制性的,你应该重新考虑移动它。

+0

这是非常奇妙的信息。我同意这个软件包不应该移出应用程序之外,但这不是我的决定。不过,这是一个很好的方法来确定我需要什么补助金。谢谢。 – stumpbeard