创建一个只读用户user_read,对用户user新建的表table能够查询,但是不能增删改,网上也说了很多方法,创建好user_read后都只能通过以下这种方法进行查询:select * from user.table,想问一下,能不能使用user_read用户,直接通过select * from table查询,而不需要指明user.table,即user_read除了只能查询外其他权限跟user用户是一模一样的,通过pl/sql查询也能直接看到user用户创建的表

解决方案 »

  1.   

    对于一个用户来讲,只有它自己的方案中的对象,才能直接查询。即不在对象前面加方案名。
    如果就是不想加方案名,可以考虑创建同义词。即给user.table1创建一个同义词table1。
    然后user用户给user_read用户授予select权限,这样user_read就可以直接from table1了。
      

  2.   

             首先你也明白数据库中的对象都是属于一个schema ,简单的讲就是每个对象都是属于一个用户的。 你现在的table表本身就属于user对象,而不是你的user_read对象,所以通过
      select * from table是怎么都查不到的。所以必须指定schema才能查询到table表
    不然默认你进去是查找你登陆用户模式下的表对象
      

  3.   

    您说的创建同义词的方法只能表面上解决此问题啊,我主要还是想直接查询原来那张表,加上“user.”
    也没关系,我现在采用的hibernate连接数据库,sql语句都是自动拼出来的,我想问一下在hibernate中应该怎么配置呢,直接使用user_read肯定不行吧,还需要怎么配置
    <property name="connection.username">user_read</property>
    <property name="connection.password">password</property>
      

  4.   

    我主要还是想直接查询原来那张表,加上“user.”
    也没关系,我现在采用的hibernate连接数据库,sql语句都是自动拼出来的,我想问一下在hibernate中应该怎么配置呢,直接使用user_read肯定不行吧,还需要怎么配置
    <property name="connection.username">user_read</property>
    <property name="connection.password">password</property>
      

  5.   

    在你hibernate的hbm.xml里加入schema="此表的拥有者" 就完事了,哪有那么复杂人家要你抓只鸟,你非要学怎么飞,在地上抓不到吗。