当Oracle中需要跨用户访问对象的时候,一般用 user.object 或者 public Synonym 。当然前提是需要有授权 才行。

  有时候我们为了管理上的方便,可能中间用了角色。

  假如 user1,user2 。  role1

  把 role1 授给 user2, user1把表的操作权授给 role1

user1  : grant  权限 on 对象 to role1
                  grant role1 to user2        

  这样,user2就可以 使用 user1 的表了,但是这种情况只能通过普通的pl/sql来访问。在 view , procedure,trigger 中是不能使用的。

  如果user2试图在view 中用 user1的表,会提示权限不足。如果试图在 trigger 和 procedure 中使用 user1的表,会提示 表和视图不存在。

  怎么办呢?

  需要显示的授权才能解决这种跨用户的对象访问。就是user1要直接把表授权给 user2, 而不通过角色。

例如:

user1用户执行如下语句

grant 权限 on 对象 to user2         

这样  user2 才能在自己的view ,trigger,procedure 中 访问user1的对象

这样 之后,如果 user2 通过

grant execute on procedureName to otherUser  则其他用户也可以通过 这个程序 访问 user1的对象。不需要user1负权给 otherUser