【问题标题】:Unable to browse synonyms in a Schema in Oracle SQL Developer无法在 Oracle SQL Developer 的模式中浏览同义词
【发布时间】:2020-07-10 22:43:24
【问题描述】:

在 Oracle 中,我是用户 C(您知道架构和用户是相同的)。 C 被授予对模式 A、B 的只读访问权限。 A 只有表。 B 只有同义词指向 A。 C能够分别使用select A.somenameselect b.somename查询A、B中的表、同义词。 但是,在 Oralce SQL Developer 中,C 无法浏览表或同义词(在左侧窗格中,在转到其他用户并选择 A 或 B 之后)。

根本原因可能是什么?

【问题讨论】:

    标签: oracle oracle-sqldeveloper database-administration


    【解决方案1】:

    SQL Developer 将向您展示 C 中 C 拥有的对象 - 而不是向您展示 C 有权访问的东西。

    如果您想查看拥有 SELECT 权限的同义词或对象,请转到“其他用户”项,然后打开树中的表或同义词项。

    但是,那时你也没有看到它们,但你知道它们在那里?

    嗯,你知道他们在那里,但数据库不想让你知道。我们正在查询 ALL_ 视图,其中内置了安全性。我们只向您显示 ALL_ 视图的内容。

    如果您是特权用户,您将有权访问 DBA_ 视图,在这种情况下,您将看到数据库中的每个对象,然后您的同义词将可用。

    还有一个替代方法,可以让SQL Developer将表的同义词处理为树中的表

    我们现在不仅从 ALL_OBJECTS 中查询 TABLE,我们现在还包括任何 TABLE 的 SYNONYMS。

    注意:必须有人在您的架构中创建一个 SYNONYM - 这不会为 PUBLIC SYNONYMS 拉入 TABLES。因为......有成千上万的人,没有人想看到所有这些。

    所以让我们做一个快速的场景

    create user a identified by oracle;
    
    create user b identified by oracle;
    
    create user c identified by oracle;
    
    create user d identified by oracle;
    
    grant connect, resource to a,b,c,d;
    grant dba to d;
    
    create table a.test(a int);
    grant select on a.test to b;
    create synonym b.a_test for a.test;
    

    A 将无法在 A 架构中的对象上看到 B 的同义词。 但 D 将能够 - 因为它可以通过该 DBA 角色访问 DBA_ 视图。

    通过 D 连接查看,浏览其他用户,B,同义词 -

    如果您查看语句日志,您可以看到我们向数据字典发出的查询以列出对象。 D 正在经历 DBA_OBJECTS 和 DBA_SYNONYMS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多