可以说,我有一个架构“ SCHEMA_1”,在此之下,我有一个对象“ EMP_TBL_Schema_1”。现在,我想通过另一个模式“ SCHEMA_2”访问该表。只有该“ SCHEMA_2”才能访问该表(数据库中除“ SCHEMA_1”以外的任何其他模式都不能访问)。因此,在这种情况下,适当的是“公共同义词”或“私人同义词”。我在这里很困惑。如我所知,私有同义词是由其所有者架构创建的,是否有可能“ SCHEMA_2”可以自己创建私有别名,以供“ SCHEMA_1”中存在的对象使用。
通过代码的解释将不胜感激。
SCHEMA_2应该创建一个私有同义词:
create synonym emp_tbl_schema_1 for schema_1.emp_tbl_schema_1
/
请注意,同义词可以是任何有效名称:它不必与SCHEMA_1中的表名称匹配。了解更多。
还要注意,创建同义词只是使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命令已在文档中全面介绍。
最后,为了解决您的困惑,公共同义词很少适合于应用程序对象。为大多数或所有用户广泛使用的实用程序对象创建它们。否则,架构应为其使用的对象创建专用同义词。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句