ITPub博客

首页 > 数据库 > Oracle > Oracle 同义词学习

Oracle 同义词学习

原创 Oracle 作者:lovehewenyu 时间:2013-01-28 15:48:51 0 删除 编辑

同义词学习 (和兜兜一起学习官档)

 

1、 Overview of Synonyms

A synonym is an alias for a schema object.Because a synonym is simply an alias, it requires no storage other than its definition in the data dictionary.

【同义词就是对象的别名,不需要存储,只是在数据字典定义】

 

2、 权限

a)        用户创建 同义词需要有 create synonym 权限

b)        用户创建 私有同义词在其他模式下需要有 create any synonym 权限

c)        用户创建 公有同义词需要有 create public synonym 权限

d)        用户删除公有同义词需要有 drop public synonym 权限

sys@TEST> grant create synonym to test;

Grant succeeded.

sys@TEST> grant create any synonym to test;

Grant succeeded.

sys@TEST> grant create public synonym to test;

Grant succeeded

 

3、   建立同义词范例 ( test 用户建立)

test@TEST> create synonym t_synonym for t;

Synonym created.

test@TEST> create synonym t_synonym_others for doudou.t1;

Synonym created.

test@TEST> create public synonym t_synonym_public for doudou.test;

Synonym created.

【推荐建立 synonym 最好指定 schemas name 】

 

4、   删除同义词范例 (删除公有同义词需要有 drop public synonym 权限)

test@TEST> drop synonym t_synonym;

Synonym dropped.

test@TEST> drop synonym t_synonym_others;

Synonym dropped.

test@TEST> drop public synonym t_synonym_public;

drop public synonym t_synonym_public

                    *

ERROR at line 1:

ORA-01031: insufficient privileges

用户 test 没有 drop public synonym 权限,所以报错;授权后可以删除

sys@TEST> grant drop public synonym to test;

Grant succeeded.

                   test@TEST> drop public synonym t_synonym_public;

Synonym dropped.

 

5 、Using Synonyms in DML Statements

因为 test 没有对 doudou.t5 表 insert 权限,所以报错

test@TEST> insert into t5a_sm values (1,'1',1);

insert into t5a_sm values (1,'1',1)

            *

ERROR at line 1:

ORA-01031: insufficient privileges

授权后,成功插入

sys@TEST> grant insert on doudou.t5 to test;

Grant succeeded

test@TEST> insert into t5a_sm values (1,'1',1);

1 row created.

test@TEST> commit;

Commit complete.

test@TEST> select * from t5a_sm;

   EQUIPNO EQUIPNAME                                                              PRICE

---------- ---------------------------------------------------------------- ----------

         1 1                                                                          1

doudou@TEST> select * from t5;

   EQUIPNO EQUIPNAME                                                              PRICE

---------- ---------------------------------------------------------------- ----------

         1 1                                                                          1

 

附表

 

一、 同义词与对象的关系

 

a)        同义词仅仅是对象的一个别名,只要数据字典中没有 synonym name 的记录,就可以创建同义词,无论对象是否存在,因为同义词只是把定义写入数据字典中。

b)        没有对象的同义词可以建立成功,但没有任何意义;数据库会把这个同义词视为无效的同义词。

c)        同义词创建后,但是没有对象的相应权限,那就不能对同义词进行相应的操作,等待授权后,一切就都可以了。

 

二、实验

 

1 、 DOUDOU 用户有表 T5 , TEST 用户没有表 T5 ;用户 test 建立 t5 同义词 t5_sm 、 t5a_sm

doudou@TEST> select * from tab;

TNAME                                                         TABTYPE          CLUSTERID

------------------------------------------------------------ -------------- ----------

T5                                                            TABLE

test@TEST> create synonym t5_sm for t5;

Synonym created.

test@TEST> create synonym t5a_sm for doudou.t5;  

Synonym created.

test@TEST> select * from tab;

TNAME                                                         TABTYPE          CLUSTERID

------------------------------------------------------------ -------------- ----------

T5_SM                                                         SYNONYM

T5A_SM                                                        SYNONYM

sys@TEST>   select owner,synonym_name,table_owner,table_name from dba_synonyms where synonym_name='T5_SM';

OWNER                 SYNONYM_NAME                     TABLE_OWNER           TABLE_NAME

-------------------- ------------------------------ -------------------- ------------------------------

TEST                  T5_SM                            TEST                   T5

sys@TEST>   select owner,synonym_name,table_owner,table_name from dba_synonyms where synonym_name='T5A_SM';

OWNER                 SYNONYM_NAME                    TABLE_OWNER           TABLE_NAME

-------------------- ------------------------------ -------------------- ------------------------------

TEST                  T5A_SM                          DOUDOU                T5

 

查看同义词 t5_sm,t5a_sm 报错是不同的。

         T5_sm 同义词无效

         T5a_sm 同义词是有效的,但是表或试图不存在,很简单 test 没有权限去看 doudou 的 t5 表

test@TEST> select count(*) from t5_sm;

select count(*) from t5_sm

                     *

ERROR at line 1:

ORA-00980: synonym translation is no longer valid

 

test@TEST> select count(*) from t5a_sm;

select count(*) from t5a_sm

                     *

ERROR at line 1:

ORA-00942: table or view does not exist

给 test 用户权限,让它可以看到 t5 ,这样同义词也可以看到数据了

sys@TEST> grant select on doudou.t5 to test;

Grant succeeded.

test@TEST> select count(*) from t5a_sm;

  COUNT(*)

----------

         0

 

2 、对象没有相应的权限,同义词就不能相应的操作,授权后即可

因为 test 没有对 doudou.t5 表 insert 权限,所以报错

test@TEST> insert into t5a_sm values (1,'1',1);

insert into t5a_sm values (1,'1',1)

            *

ERROR at line 1:

ORA-01031: insufficient privileges

sys@TEST> grant insert on doudou.t5 to test;

 

Grant succeeded

test@TEST> insert into t5a_sm values (1,'1',1);

1 row created.

test@TEST> commit;

Commit complete.

test@TEST> select * from t5a_sm;

   EQUIPNO EQUIPNAME                                                              PRICE

---------- ---------------------------------------------------------------- ----------

         1 1                                                                          1

 

doudou@TEST> select * from t5;

   EQUIPNO EQUIPNAME                                                              PRICE

---------- ---------------------------------------------------------------- ----------

         1 1                                                                          1

 

三、知识点

 

同义词介绍

http://docs.oracle.com/cd/E11882_01/server.112/e25789/schemaob.htm#autoId25

同义词管理

http://docs.oracle.com/cd/E11882_01/server.112/e25494/views003.htm#i1106663

 

 

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

请登录后发表评论 登录
全部评论
10年金融行业老鸟。Oracle,Mysql,PostgreSQL,EMC 存储,NBU备份。微信/电话 18211103995

注册时间:2012-02-03

  • 博文量
    307
  • 访问量
    1528522