Oracle synonyms总结

synonyms(同义词)就是给数据库对象取一个别名,因为同义词只是一个别名,因此它只需在数据字典中存储自身的定义,而无需额外的存储空间。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。


同义词分为两种:公共同义词与私有同义词。公共同义词由特殊的用户组 PUBLIC 所拥有,一般由DBA、SYSTEM、SYS创建,数据库中的每个用户都能够访问。而私有同义词属于某个用户,此用户可以通过授权来控制哪些用户可以使用属于她的私有同义词。创建同义词语法:CREATE [PUBLIC]  SYNONYM  同义词名称 FOR  用户.对象。


同义词主要是出于方便和安全性上的考虑,主要作用如下:

隐藏一个数据库对象的名字和拥有者 隐藏分布式数据库中远程对象的位置 简化SQL 语句 和视图类似能够限制访问,用于实现更精细安全的访问控制

下面举例来说明:

--连接sys用户

SQL> connect sys/gyb860518 as sysdba;
已连接。

--查询所有的同义词

SQL> select synonym_name, table_owner, table_name from user_synonyms;

SYNONYM_NAME                   TABLE_OWNER             TABLE_NAME
------------------------------ ------------------------------ ------------------
DEF$_AQCALL                       SYSTEM                          DEF$_AQCALL
DEF$_CALLDEST                    SYSTEM                          DEF$_CALLDEST
DEF$_SCHEDULE                   SYSTEM                          DEF$_SCHEDULE
DEF$_ERROR                         SYSTEM                          DEF$_ERROR
DEF$_DEFAULTDEST              SYSTEM                          DEF$_DEFAULTDEST
DEF$_LOB                              SYSTEM                          DEF$_LOB
XMLDOM                                 XDB                                DBMS_XMLDOM
XMLPARSER                            XDB                                DBMS_XMLPARSER
XSLPROCESSOR                     XDB                                DBMS_XSLPROCESSOR

已选择9行。

--创建scott用户的test表的私有同义词(默认为私有)

SQL> create synonym test_syn for scott.test;

同义词已创建。

--用户可以通过简单的语句来查询test表

SQL> select * from test_syn;

ID         NAME
---------- --------------------
0437      gyb
002        gao
003        aaa
004        gyb
005        gyb

--连接scott用户

SQL> connect scott/gyb860518;
已连接。

--执行查询私有同义词报错

SQL> select * from test_syn;
select * from test_syn
              *
第 1 行出现错误:
ORA-00942: 表或视图不存在

--在sys用户下授权给scott

SQL> grant select on test_syn to scott;

授权成功。

-在查询私有同义词成功

SQL> select * from sys.test_syn;

ID         NAME
---------- --------------------
0437      gyb
002        gao
003        aaa
004        gyb
005        gyb

--在sys用户下创建共有同义词(这里与上面的私有同义词设为同名,后面用到)

SQL> create public synonym test_syn for scott.test2;

同义词已创建。

--查询同名的同义词,以私有同义词优先(类似于局部变量)

SQL> select * from test_syn;

ID         NAME
---------- --------------------
0437       gyb
002        gao
003        aaa
004        gyb
005        gyb

--重新创建一个共有同义词

SQL> create public synonym test2_syn for scott.test2;

同义词已创建。

--在scott用户下查询共有同义词成功,隐藏了test2表的名称以及它所属的schema名

SQL> select * from test2_syn;

ID                AGE
---------- ----------
001                23

--通过同义词来更新表的数据

SQL> update test2_syn set age=24 where id='001';

已更新 1 行。

SQL> select * from test2_syn;

ID                AGE
---------- ----------
001                24


--删除同义词 

SQL> drop synonym test_syn;

同义词已删除。

对于同义词我个人觉得它是不可修改的,因为它的定义是保存在数据字典中的,而数据字典是一组只读表的组合,不可更新。试一下看看:

--在sys用户下查询所有的同义词

SQL> select synonym_name, table_owner from user_synonyms;

SYNONYM_NAME                   TABLE_OWNER
------------------------------ ----------------------------
DEF$_AQCALL                        SYSTEM
DEF$_CALLDEST                     SYSTEM
DEF$_SCHEDULE                    SYSTEM
DEF$_ERROR                          SYSTEM
DEF$_DEFAULTDEST               SYSTEM
DEF$_LOB                              SYSTEM
XMLDOM                                 XDB
XMLPARSER                            XDB
XSLPROCESSOR                      XDB
TEST_SYN                               SCOTT

已选择10行。

--更新scott拥有者的同义词名

SQL> update user_synonyms set synonym_name ='haha' where table_owner='SCOTT';

已更新0行。

SQL> select synonym_name, table_owner from user_synonyms;

SYNONYM_NAME                   TABLE_OWNER
------------------------------ ------------------------------
DEF$_AQCALL                        SYSTEM
DEF$_CALLDEST                     SYSTEM
DEF$_SCHEDULE                    SYSTEM
DEF$_ERROR                          SYSTEM
DEF$_DEFAULTDEST               SYSTEM
DEF$_LOB                               SYSTEM
XMLDOM                                 XDB
XMLPARSER                            XDB
XSLPROCESSOR                      XDB
TEST_SYN                               SCOTT    //这里并没有被更新

已选择10行。


以上我的理解可能存在一定的问题,希望大家即时指正,一起讨论!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28673746/viewspace-1147203/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28673746/viewspace-1147203/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值