当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