gpt4 book ai didi

oracle - ORA-06564 跨模式访问外部表时

转载 作者:行者123 更新时间:2023-12-02 21:02:55 29 4
gpt4 key购买 nike

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

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

当我从架构 B 中调用: SELECT COUNT(*) FROM A.LETTER; 时,我总是得到 ORA-06564: object A does not Exist

这与我们在常规表上获得的授权相同,我们可以从这些表中获取计数。我不确定问题出在哪里或如何最好地解决它?

最佳答案

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

GRANT READ,WRITE ON DIRECTORY A TO B;

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

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

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

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

关于oracle - ORA-06564 跨模式访问外部表时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37419900/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com