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