个人理解,如有不正确的地方请指正。
前期准备:
首先要赋予用户创建同义词的权限。
管理员打开 命令提示符窗口。输入:sqlplus / as sysdba。
以管理员的身份登录数据库,然后赋予权限:
要想可以创建公共同义词,需要赋予第二个 public 权限
grant create synonym to user_name
grant create public synonym to scott;
问题思考
数据库中有两个用户,A、B,A中有表At,如何在B中访问到At?
当然,你可以在B中把表重新建立一次。
上边的方法自然不可取。此时就要用到同义词的思想。可以理解为给At创建一个可以供外界访问的通道。不仅仅可以对表创建同义词,在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。
同义词的优点。
使用同义词优点:避免当管理员对数据库对象做出修改和变动之后,必须重新编译应用程序。使用同义词后,即使引用的对象发生变化,也只需要在数据库中对同义词进行修改,而不对应用程序做任何修改。
同义词分类:公有同义词、私有同义词。
- 公有同义词由public用户组拥有,数据库中的所有用户都可以使用公有同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。
- 私有同义词只被创建它的用户所拥有,只能由该用户以及被授权的其他用户使用。这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。
如何使用(实例)
B表访问A表内容
scott用户中存在一张emp表。
guojy用户想要访问emp表。直接无法访问。
此时在guojy中对scott中的emp表创建别名。
CREATE OR REPLACE SYNONYM emp_symo FOR scott.emp;
此时利用同义词在guojy中进行查询。
SELECT t.* FROM emp_symo t;
C表访问A表中的At
问题思考:其他用户也要访问这个表呢?
当然可以在C中也为At建立别名。但是最好的方式是建立公共别名。public
首先我们先看,在guojy1中访问表或者刚才建立的别名会发生什么。
此时均查不到信息。因为,emp_symo 数据guojy这个用户私有访问,其他的用户无法访问。
在scott建立公共同义词。
CREATE OR REPLACE PUBLIC SYNONYM emp_symo_public FOR emp;
此时登陆guojy1 用户再查询。
经过以上应该会对与同义词有一个基本的概念了。