绕过包编译中的"table or view does not exist"



Oracle数据库有两种模式

由我控制的MYSCHEMA

不受我控制的OTHERSCHEMA

我只知道我可以从select * from OTHERSCHEMA.OTHEROBJECT得到结果。而OTHEROBJECT的同义词

在我的包中,有一个像

这样的语句
insert into MYSCHEMA.MYTABLE(COL1) select COL1 from OTHERSCHEMA.OTHEROBJECT;

但是它给了我Table or view does not exist.

如何解决或绕过这个问题?谢谢!

我假设您通过角色获得了从otherschema.otherobject中进行选择的权限,而不是直接授予(如grant all on otherschema.otherobject to myschema)。如果是这种情况,则该角色中的权限将不会用于确定您在PL/SQL块中的权限。

参见角色在PL/SQL块中的工作原理(Oracle文档),在下说,在具有定义者权限的命名块中使用的角色:

在任何以定义者权限执行的命名PL/SQL块(存储过程、函数或触发器)中,所有角色都被禁用。角色不用于权限检查,并且不能在定义者的权限过程中设置角色。

相关内容

最新更新