oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
同义词
同义词本质上属于近义词的概念,它是表、索引、视图等模式对象的一个别名
通过为模式对象创建同义词,可以隐藏对象的实际名称和所有者信息,这样可以为对象提供一定的安全性保证
SELECT SYSDATE FROM dual ;
此时的程序就是查询日期时间,但是在之前说过 dual 属于一张临时表,那么这张临时表到底是属于谁的呢?
通过一系列的查询可以发现,dual 数据表是属于 sys 用户的。
既然 dual 属于 sys,那么按照之前的概念来说,不同的用户要进行表的互相访问,前面需要使用模式名,也就是说如果 scott 用户要使用 dual,则应该使用 sys.dual 才对。
而这个操作就属于同义词的定义范畴,也就是说 dual 是 sys.dual 的同义词。如果想创建同义词,可使用一下语法:
create [PUBLIC] SYNONYM 同义词名称 FOR 模式.表名称
其中 PUBLIC 表示创建的同义词是公用的,数据库中所有用户都可以使用
将 scott.emp 数据表映射为 semp,连接 sys 用户
CREATE SYNONYM semp FOR scott.emp ;
同义词创建完成之后就可以直接利用同义词进行数据查询
SELECT * FROM semp ;
但是现在的问题是,此同义词无法被其他用户使用,它只能够被 sys 使用
如果想让一个同义词被所有用户使用,那么应该将其创建为公共同义词
切换回 sys 用户,重新创建同义词
CONN sys/change_on_install AS SYSDBA ;
DROP SYNONYM semp ;
CREATE PUBLIC SYNONYM semp FOR scott.emp ;
上面代码中“DROP SYNONYM semp ”为删除同义词的语句。虽然同义词可以被其他用户访问了,但是对我们开发的意义不大
如果在当前模式中创建私有同义词,要求数据库用户必须具有 create synonym 的系统权限
如果要在其他模式中创建私有同义词,要求数据库用户必须具有 create any synonym注意的系统权限