我们的数据库中有两个模式,我正在尝试从模式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
这与普通表上的授权相同,我们可以从这些表中获取计数。我不确定这里的问题是什么或者如何最好地解决它?
答案 0 :(得分:4)
模式B需要被授予外部表目录的读权限(至少;除非表有NOBADFILE
和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 LETTER
或FROM B.LETTER
,它们仍然与您似乎使用的模式不匹配。