2

我们的数据库中有 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

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

4

1 回答 1

5

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

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 LETTERor FROM B.LETTER,它仍然与你似乎正在使用的模式不匹配。

于 2016-05-24T17:43:15.700 回答