同义词SYNONYM

同义词是表、索引、视图等模式对象的一个别名。通过模式对象创建同义词,可以隐藏对象的实际名称和所有者信息,或者隐藏分布式数据库中远程对象的设置信息,由此为对象提供一定的安全性保证。与视图、序列一样,同义词只在Oracle 数据库的数据字典中保存其定义描述,因此同义词也不占用任何实际的存储空间。

在开发数据库应用程序时,应该尽量避免直接引用表、视图或其他数据库对象的名称,而改用这些对象的同义词。这样可以避免当管理员对数据库对象做出修改和变动后,必须重新编译应用程序。使用同义词后,即使引用的对象发生变化,也只需要在数据库中对同义词进行修改,而不必对应用程序做任何改动。

Oracle 中的同义词分为两种类型:公有同义词和私有同义词。公有同义词被一个特殊的用户组PUBLIC 所拥有,数据库中的所有用户都可以使用公有同义词。而私有同义词只被创建它的用户所拥有,只能由该用户以及被授权的其他用户使用。建立公有同义词是使用 CREATE PUBLIC SYNONYM 语句完成的。如果数据库用户要建立公有同义词,则要求该用户必须具有CREATE PUBLIC SYSNONYM 系统权限.

【案例】在 SYSTEM 模式,为SCOTT 模式下的dept 表创建一个public 同义词,代码及运行结果如下。
SQL> connect system/1qaz2wsx
已连接
SQL> create public synonym public_dept for scott.dept;

同义词已创建

执行以上语句后,将建立公有同义词 public_dept。因为该同义词属于PUBLIC 用户组,所以所有用户都可以直接引用该同义词。需要注意的是,如果要使用该同义词,用户必须具有访问SCOTT.EMP表的权限。

建立私有同义词是使用 CREATE SYNONYM 语句完成的。如果在当前模式中创建私有同义词,那么数据库用户必须具有CREATE SYNONYM 系统权限;如果要在其他模式中创建私有同义
词,则数据库用户必须具有CREATE ANY SYNONYM 系统权限。
【案例】为 dept 表创建私有同义词private_dept,代码及运行结果如下。
SQL> create synonym private_dept for dept;

同义词已创建

私有同义词只有当前用户可以直接引用,其他用户在引用时必须带模式名。当基础对象的名称和位置被修改后,用户需要重新为它建立同义词。用户可以删除自己模式中的私有同义词。要删除其他模式中的私有同义词,用户必须具有DROP ANY SYNONYM 系统权限。要删除公有同义词,用户必须具有DROP PUBLIC SYNONYM 系统权限。

【案例】使用 DROP SYSNONYM 语句删除私有同义词private_dept,代码及运行结果如下。
SQL> drop synonym private_dept;
同义词已删除
【案例】使用 DROP PUBLIC SYSNONYM 语句删除公有同义词public_dept,代码及运行结果如下。
SQL> drop public synonym public_dept;
同义词已删除
删除同义词后,同义词的基础对象不会受到任何影响,但是所有引用该同义词的对象将处于INVALID 状态。

猜你喜欢

转载自blog.csdn.net/qq_38410825/article/details/80695623