假设有用户A、B
A用户建立了表a1、a2、a3
B用户简历了表b1、b2、b3哪么已A用户登陆数据库,需要访问b1,只能用select * from B.b1这样来访问吗???由于我计划从SQL Server转换到oracle 10g原来使用Windows域控服务器来控制用户权限。
但到Oracle中应该如何控制权限呢?
首先一个数据库里面有很多个不同部门的表,我们所有的表是按部门建立的,原来的程序都是直接写表名的,不会加前缀的
这样在Oracle里面都要加前缀???小弟才疏学浅望大家多多献策.

解决方案 »

  1.   

    这个要先授权,才能用
    比如在B用户下执行
    grant select,insert,update,delete on B1 to A;
    然后就可以在A用户下对B.B1表进行相关操作了
      

  2.   

    哪么已A用户登陆数据库,需要访问b1,只能用select * from B.b1这样来访问吗??? 
    ------------------------------------------------------------------------
    A 用户要有B用户的访问权限也可以通过DBLINK来实现 但是分配权限还是比较好的
      

  3.   

    首先一个数据库里面有很多个不同部门的表,我们所有的表是按部门建立的,原来的程序都是直接写表名的,不会加前缀的 
    这样在Oracle里面都要加前缀??? 没有看懂你提的这个问题 ,如果只是访问别的用户底下的表 ,授权就可以了!
      

  4.   

    直接访问其它用户下的表是一定要加前缀的,除非用同义词。
    不加前缀的话sql默认查询当前用户的表,到时候去提示“表或视图不存在”
      

  5.   

    [Quote=引用楼主 tianhuo_soft 的帖子:
    首先一个数据库里面有很多个不同部门的表,我们所有的表是按部门建立的,原来的程序都是直接写表名的,不会加前缀的 
    这样在Oracle里面都要加前缀??? 
    [/Quote]
    Oracle里边的表默认的模式是属于建表的用户,你用哪个用户建表,其他用户访问时就的加该用户名.表
    如果你想不该程序直接用表名可以用public synonym
    create public synonym 程序中的表名 for 用户名.表;
    当然要有相应权限
      

  6.   

    同义词SQL Server 2005有这个概念
      

  7.   

    用grant语句解决权限问题
    如: grant select,insert,update,delete on B1 to A; 
    或者grant all on B1 to A; 
    用建立同义词的方式避免前缀
    CREATE PUBLIC SYNONYM B1 FOR B.B1;
      

  8.   

    首先,必须要授权,即grant,如果你没有授权的话,即使用B.TABLE也无法访问的。其次,在不同用户名下创建的表,访问的时候除了使用同义词外,必须使用前缀的,这个涉及到表空间的关系(sql server下面也有相应的情况,即模式)。就跟你想访问D盘下面的文件必须访问D:\这个盘符一样的。虽然解释的不是很到位,但是基本就是那个意思。楼主的情况的话,建议使用同义词。