客户在schema MEDADM下创建了一个视图,并且将视图的查询权限赋予给了另一个用户BAZK.
但是使用BAZK查询视图的时候还是报错:
ORA-01031: insufficient privileges
我查看了视图的内容,视图很复杂,涉及的表有10个左右.使用BAZK用户查询视图中的表都是有权限的查询的.
注意到这个视图中的表并不全是MEDADM下的,例如还有表是INPADM下的.那么这里就涉及到了很多用户,在此归类一下:
1.原始的基表用户.例如这里的INPADM或者其它的用户.
这个用户下是真正存放数据表的用户
2.视图用户
此用户是创建的视图用户.
3.查询用户
此用户是前台连接会话查询的用户
如果想要查询用户具有查询视图的权限.则视图用户和查询用户必须具有原始基表用户表的select权限(显式赋权)并且一定要赋予with grant option
参考oracle MOS文档:
因此解决办法:
1. grant select on 表用户.表名 to 视图用户 with grant option;
2.grant select on 表用户.表名 to 查询用户 with grant option;
3. grant select on 视图用户.视图名 to 查询用户 with grant option;
这里一定要显式的授予权限.