system登陆后建的对象的owner都是system,别的user如果要访问加上sys.对象名(要查看system的view1还要求user有select * from view1的权限.). 如果希望user1登陆后只能看到view1,那就用user1登陆建view1.

解决方案 »

  1.   

    还要控制user1的其他权限,如果user1是DBA的话,我想他什么都能看见吧!
      

  2.   

    user1是DBA的话可以直接访问其他用户的对象,
    例如select * from system.view1
    如果user1不是dba,可以用如下方式访问:
    1. system:grant select,[Privileges] on view1 to user1;
       user1: select * from system.view1;
    2. system:create public synonym view1 for system.view1;//公有同义词
               grant select,[Privileges] on view1 to user1;
       user1:select * from view1;
    另外,也可以通过角色授权
      

  3.   

    oracle默认是访问自己的用户对象,如果要访问别的用户对象,如果有权限,加上用户名在前面,如果没有权限要专门授予相应的权限,建议建立数据表不要在系统表空间里面建立,这样不易与管理等
      

  4.   

    我的意思是说:oracle能否控制低权限的用户登陆进去后什么别的表名都看不到,只能看到DBA给自己分配查询权限的表。我想oracle能这样实现的话,开发具有授权功能的程序思路会非常清晰。
      

  5.   

    兩種方法;
    1.grant ... 給權限
    2.DBLINK
      

  6.   

    首先用户应该只有connect身份。
    其次grant select on view1 to user01;
    因该就只能看了吧。
    不过看得时候得写select * from System.view1
      

  7.   

    请楼上不要想当然,这种方法当然是闭着眼睛都能想到的方法,我只是问能否控制低权限的用户登陆近数据库后不能看见任何表对象的名称,我反正在SqlServer中不行,转来投靠Oracle,却告诉我要用Grant,我在Sqlserver中已经用过了,可就无论怎么样用户总能看见所有表对象的名称。
      

  8.   

    <<我只是问能否控制低权限的用户登陆近数据库后不能看见任何表对象的名称>>oracle本来就是这样的,如果你只有视图的权限,你只能看到视图。你在什么地方可以看到表的名称?
      

  9.   

    oracle基本可以的!要创建同义词!