Oracle synonyms总结_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2338 | 回复: 0   主题: Oracle synonyms总结        下一篇 
sysbobo
注册用户
等级:新兵
经验:46
发帖:66
精华:0
注册:2012-2-21
状态:离线
发送短消息息给sysbobo 加好友    发送短消息息给sysbobo 发消息
发表于: IP:您无权察看 2015-5-19 10:01:14 | [全部帖] [楼主帖] 楼主

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行。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论