SID: TEST
USER: TESTUSER 具有CONNECT,RESOURCE,DBA权限
其中TESTUSER 下有多个表
想再创建一个能在oracle客户端查询 TESTUSER 下部分表(如:t1)的用户 user1在SYS用户操作如下:
create user user1 identified by user1;
grant connect,resource to user1;
Grant create session to user1;
grant select on v_$statname to user1;
grant select on v_$sesstat to user1;
grant select on v_$session to user1;
grant select on v_$mystat to user1;
grant select any table to user1;
grant select on TESTUSER .t1 to user1;经过多番试验我这样做了之后还是不行!请各位指点一下面我哪一点没做好才导致用新创建的用户查不出t1信息的???
不过在user1用户下执行 select * form testuser.t1; 还是能查出来的。
我只是不想再查询的时候加 testuser.

解决方案 »

  1.   

    grant select on TESTUSER .t1 to user1; 你这条命令就是给user1有查询t1的权限,
    去掉:
    revoke select on testuser.t1 from user1;
      

  2.   

    跨schema的对象,需要通过schema.objectname这样的方式来查询,如果想连schema都省了,就在user1下建立synonym比如create synonym t1 for for testuser.t1;你现在就可以把schema去掉了。
      

  3.   

    对,如果你想隐藏一些信息的话,比如上面的testuser。那么你可以用3楼的方法创建一个同义词synonym。
    3楼的多写了个for。create synonym t1 for testuser.t1;这样创建了同义词t1,那么此时user1用户可以这样使用该同义词:
    select * from t1;如果希望系统中的所有用户都可以使用该同义词的话:则可以创建一个公用的同义词:
    如:
    create public synonym  synonym_name for  user_name.tab;