我们可以在对象处于不同模式的其他模式中创建私有同义词吗

Can we create Private synonym in other schema for which Object is in different schema

比方说,我有一个模式 "SCHEMA_1",在这个模式下我有一个对象 "EMP_TBL_Schema_1"。现在我想通过另一个模式 "SCHEMA_2" 访问此 table。只有这个 "SCHEMA_2" 应该能够访问这个 table(除了 "SCHEMA_1" 之外,数据库中没有任何其他模式)。因此,在这种情况下,Public 同义词或私有同义词是合适的。我在这里很困惑。 据我所知,私有同义词是由它的所有者模式创建的,"SCHEMA_2" 是否可以自己创建私有同义词以供 "SCHEMA_1" 中存在的对象使用。

将不胜感激通过代码进行解释。

SCHEMA_2 应该创建一个私有同义词:

create synonym emp_tbl_schema_1 for schema_1.emp_tbl_schema_1
/

请注意,同义词可以是任何有效名称:它不必与 SCHEMA_1 中 table 的名称相匹配。 Find out more.

另请注意,创建同义词只是为了使 DML 更易于编写。它不授予对引用对象的任何权限。 SCHEMA_1 必须授予 SCHEMA_2 权限。这授予 select 并插入:

SQL>  conn SCHEMA_1/password
SQL>  grant select, insert on emp_tbl_schema_1 to schema_2;

这允许 SCHEMA_2 查询 table 并插入新记录,但不能更新或删除现有记录。显然,GRANT 命令被完全覆盖 in the documentation.

最后,为了解决您的困惑,public 同义词很少适用于应用程序对象。为大多数或所有用户广泛使用的实用对象创建它们。否则,模式应该为它们使用的对象创建私有同义词。