问题是这样的,我创建了两个用户user1和user2,现在分别都赋予了connect,resource,dba 权限,但是我用user2访问user1的表时,报表或视图不存在的错误。同时user1在过程里面调用user2里面的过程和函数的时候也报必须声明标识符。就是说这两个用户之间不能互相访问他们各自的对象(表,过程,函数)。但是我已经给他们赋予了dba权限,不应该会出现这种情况啊,我在网上看到很多关于这个的,有的朋友说得grant user1.对像 to user2,  grant user2.对象 to user1,但是这样太麻烦啦,有不有方法可以实现让这两个用户之间实现自由调用请各位大侠帮忙,万分感谢

解决方案 »

  1.   

    在你的描述中,user1和user2都是由同一用户(具有dba权限)创建,
    并赋予的dba权限,也就是说,user1和user2是属于同一层上,
    他们各自被赋予的dba权限,只能对他们自己创建的用户才起作用,
    而user1和user2之间并没有什么联系,
    如果要访问彼此,必须将各自拥有的对象的访问权限授予对方,
    他们才能彼此访问。
      

  2.   

    不是说给了DBA权限就能随意访问别的用户下的东西了。一般有DBA 权限的用户要访问其它用户下的对象要加上 用户名.对象名 就算是sys用户访问其它用户的对象也是这样。除非你把其它用户下的对象建立Synonyms ,这样的话就不用加用户名了。
      

  3.   


    我用的就是user1.method这种引用方式,没有直接调用
    在工具里面有提示存在这个函数,但是一编译的话就报错
      

  4.   


    在user2下 grant connect,resource to user1在user1下 grant connect,resource to user2是不是这样赋予权限,已经这操作啦,还是不行,提示  必须声明标识符还是不能调用
      

  5.   


    --最好别这么做,需要访问什么对象,就授权访问什么对象
    conn as a
    grant all privileges to b;具体语法:

    Oracle/PLSQL: Grant/Revoke Privileges
      

  6.   

    grant all privileges to user;慎用…
      

  7.   

    你确信访问的语句没写错?  应该不可能啊 。  select * from b.tab应该可以才对。
      

  8.   


    --更正一下1楼的,
    --因为没经过测试,所以1楼错了,下面是一个具体的实例
    --仅供参考,
    --我们来看下面这个授权的二叉树,实际中肯定是个图(复杂的图):
                dba
              /     \
         u1(dba) → u2(dba)
          /   \          \  
         u3   u4          u5
    /*
    如上二叉树所示,假设u1和u2都被授予了dba权限,
    u1和u2又各自创建了普通用户u3,u4,u5;
    u1,u2dba用户可以任意的访问操作
    其他用户(u1,u2,u4,u5)下的对象(table,view,function...)
    */详细实例,请参考:

    oracle 谨慎授予用户dba权限