用户A拥有表a,现在用户A给用户B赋表a的查询权限,之后可以采取以下方式建立同义词:
方式一、在A用户下,执行create synonym B.a for a;
方式二、在B用户下,执行create synonym a for A.a; 请问下,这两个有什么区别呢?

解决方案 »

  1.   


    其实意思是没什么好大的区别,有点多余.
    在A用户下,执行create synonym B.a for a;  这个在A下为表a建的同义词为B.a  
    以后访问就可以这样 select * from B.a,但是我觉得很多余 
    直接是grant select on table to B
    create synonym a for a 就可以了 
    在用户B下 select * from a
      

  2.   

    方式一、在A用户下,执行create synonym B.a for a;--创建同义词为B.a
    方式二、在B用户下,执行create synonym a for A.a;--创建同义词为a
    表面上看就是在不同用户下
    create synonym B.a for a;
    create synonym a for A.a; for后面的对象区别 与同义词的名称的区别
      

  3.   


    是一样的,都是为B用户建一个名称a的同义词,这个同义词引用A.a表
      

  4.   

    最终结果都是在架构 B 下创建指向 A.a 的私有同义词。不过创建时需要的权限不一样,前者要求 A 用户具有 CREATE ANY SYNONYM 系统权限,而后者要求 B 用户具有 CREATE SYNONYM 系统权限。
      

  5.   


    创建同义词有2个好处,1,不让A用户看到B用户的对象。2,就是规范sql脚本,方便维护。方式一、在A用户下,执行create synonym B.a for a;
      就是在用户A下面 ,创建一个同义词,名字为a,指向B用户下面的表a,查询的时候 select * from a 即可。
    方式二、在B用户下,执行create synonym a for A.a;
       在B用户下面,创建一个同义词名字叫A.a,指向B用户下面的表a。
       在B用户下,查询时候,用 select * from a 即可。