如题:A用户下面有表table1
创建用户B,只有connect和Select权限。能否使B访问A的表时这样写 select * from table1, 而不是 select * from A.table1。各位大拿详细说说 , 谢谢 !

解决方案 »

  1.   

    grant create any synonym to B;
      

  2.   


    --只能采用公有同义词的方式(public synonym),你必须给B用户create public synonym的权限
    ----或者采用其他大权限用户如 sys system 创建相关的同义词,同时将B用户下表的查询权限付给相应用户
    --如:[SYS@myoracle] SQL>create user test identified by test;用户已创建。[SYS@myoracle] SQL>grant connect ,resource to test;授权成功。[SYS@myoracle] SQL>create user test1 identified by test1;用户已创建。[SYS@myoracle] SQL>grant connect ,resource to test1;授权成功。[SYS@myoracle] SQL>conn test1/test1
    已连接。
    [TEST1@myoracle] SQL>create table t1(id int);表已创建。[TEST1@myoracle] SQL>conn test/test
    已连接。
    [TEST@myoracle] SQL>select * from test1.t1;
    select * from test1.t1
                        *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在
    [TEST@myoracle] SQL>conn / as sysdba
    已连接。
    [SYS@myoracle] SQL>create public synonym t1 for test1.t1;同义词已创建。[SYS@myoracle] SQL>conn test/test
    已连接。
    [TEST@myoracle] SQL>select * from t1;
    select * from t1
                  *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在
    [TEST@myoracle] SQL>conn test1/test1
    已连接。[TEST1@myoracle] SQL>grant select on t1 to test;授权成功。[TEST1@myoracle] SQL>conn test/test
    已连接。
    [TEST@myoracle] SQL>select * from tab;未选定行[TEST@myoracle] SQL>select * from t1;未选定行[TEST@myoracle] SQL>desc t1;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ID                                                 NUMBER(38)[TEST@myoracle] SQL>
      

  3.   

    在DBA 下面创建 表 table1 的同义词
    create public synonym table1 for 用户A.table1;然后在用户A下面把这个同义词的select 权限 赋予 B用户
    grant select on 用户B;
      

  4.   

    谢谢各位啦,已经解决了问题。还有几个不清楚的地方。我就是直接在B里面创建同义词  create synonym table1 for A.table1; 然后给B以Select权限。
    一定要建立public的同义词吗?