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

ORA-06564 When accessing External table across schemas

我们的数据库中有 2 个模式,我正在尝试从模式 B 访问模式 A 中的外部 table 行数。

外部table有一个grantGRANT SELECT ON A.LETTER TO B WITH GRANT OPTION;

当我调用:SELECT COUNT(*) FROM A.LETTER; 从模式 B 我总是得到 ORA-06564: object A does not exist

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

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

GRANT READ,WRITE ON DIRECTORY A TO B;

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

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

如果您不希望 B 能够访问该目录,您可以创建一个视图并在其上授予 select:

CREATE VIEW A.V_LETTER AS SELECT * FROM A.LETTER;
GRANT SELECT ON A.V_LETTER TO B;

那么B可以SELECT COUNT(*) FROM A.V_LETTER,不需要目录权限;但是使用不同的名称对您来说可能是个问题(或者至少会造成一些混淆)。 B 当然可以为 A.V_LETTER 创建一个同义词,但是你会得到 SELECT COUNT(*) FROM LETTERFROM B.LETTER,它们仍然与你似乎正在使用的模式不匹配。