ORA-06564 跨架构访问外部表时

Jon*_*nny 2 oracle external-tables

我们的数据库中有 2 个模式,我试图从模式 B 访问模式 A 中的外部表行数。

外部表有授权 GRANT SELECT ON A.LETTER TO B WITH GRANT OPTION;

当我打电话时:SELECT COUNT(*) FROM A.LETTER;从 Schema BI 总是得到ORA-06564: object A does not exist

这与我们在常规表上的授权相同,我们能够从这些表中获取计数。我不确定这里的问题是什么或如何最好地解决它?

Ale*_*ole 5

模式 B 需要被授予对外部表目录的读取权限(至少;它也需要写入,除非表具有NOBADFILENOLOGFILE):

GRANT READ,WRITE ON DIRECTORY A TO B;
Run Code Online (Sandbox Code Playgroud)

不清楚您是否真的有一个与模式同名的目录对象,或者您是否混淆了名称以将它们隐藏在问题中。但是ORA-06564中的对象名应该是目录对象名。

外部表也可能引用多个目录 - 用于数据文件、日志文件等 - 如果是这样,则需要向所有这些目录授予适当的权限。

如果您不希望 B 能够访问该目录,您可以创建一个视图并授予选择权限:

CREATE VIEW A.V_LETTER AS SELECT * FROM A.LETTER;
GRANT SELECT ON A.V_LETTER TO B;
Run Code Online (Sandbox Code Playgroud)

然后 B 可以SELECT COUNT(*) FROM A.V_LETTER,不需要目录权限;但是使用不同的名称可能对您来说是个问题(或者至少有点令人困惑)。B 可以为A.V_LETTER当然创建同义词,但是您将拥有SELECT COUNT(*) FROM LETTERor FROM B.LETTER,它仍然与您似乎正在使用的模式不匹配。