我们是否可以在其他模式中为Object处于不同模式

时间:2015-06-11 03:58:38

标签: oracle synonym

可以说,我有一个模式“SCHEMA_1”,在此我有一个对象“EMP_TBL_Schema_1”。现在我想通过另一个模式“SCHEMA_2”访问该表。只有这个“SCHEMA_2”应该能够访问该表(除了“SCHEMA_1”之外,不能存在于DB中的任何其他模式)。因此,在这种情况下,适当的,公共同义词或私人同义词。我在这里很困惑。 据我所知私有同义词是由其所有者Schema创建的,“SCHEMA_2”是否可以通过它自己为“SCHEMA_1”中出现的对象创建私有同义词。

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

1 个答案:

答案 0 :(得分:1)

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

create synonym emp_tbl_schema_1 for schema_1.emp_tbl_schema_1
/

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

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

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

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

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