ORA-06564跨模式访问外部表

时间:2016-05-24 17:10:25

标签: oracle external-tables

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

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

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

这与普通表上的授权相同,我们可以从这些表中获取计数。我不确定这里的问题是什么或者如何最好地解决它?

1 个答案:

答案 0 :(得分:4)

模式B需要被授予外部表目录的读权限(至少;除非表有NOBADFILENOLOGFILE,否则还需要写入):

GRANT READ,WRITE ON DIRECTORY A TO B;

如果您确实拥有一个与架构同名的目录对象,或者如果您将这些名称混淆了一些隐藏在问题中的名称,则不清楚。但是ORA-06564中的对象名称应该是目录对象名称。

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

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

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,它们仍然与您似乎使用的模式不匹配。