阶级性和特权
范例——有三个用户test1,test2,test3, 三个用户都具有DBA色色权限。
用TEST1用户创建一个表T1,并将其查询权限授予TEST2;
用TEST2用户创建一个视图,视图的基表是TEST1.T1,并将查询权限授予TEST3
1.授权
1.1. 视图中,类似于定义者权限的存储过程,是屏蔽了角色权限的。比如如果TEST1没有显式地将T1表的SELECT权限给予TEST2,那么TEST2在创建视图V_T1时也会报ORA-01031错误,即使TEST2用户拥有DBA角色权限。
grant select on v_t1 to test3;
1.2.如果在用户test2的视图中,引用了其他用户test1的表,用户test2将视图的访问权限给予用户test3,那么就变相地将用户test1的表的访问权限给予了用户test3,因此,用户test2必须有将用户test1的表的访问权限转授用户test3,也就是用户test1在授予test2权限时,必须使用with grant option。
grant select on t1 to a with grant option;
*由于有SELECT ANY TABLE权限的存在,所有的用户表都可以被访问。但是显式授予表的权限时,似乎表的权限有更高的优先级,并且没有跟系统权限和角色权限进行结合。
2.权限的查看
2.1:与权限,角色相关的视图大概有下面这些:
DBA_SYS_PRIVS: 查询某个用户所拥有的系统权限 USER_SYS_PRIVS: 当前用户所拥有的系统权限
SESSION_PRIVS: 当前用户所拥有的全部权限 ROLE_SYS_PRIVS: 某个角色所拥有的系统权限
注意: 要以SYS用户登陆查询这个视图,否则返回空. ROLE_ROLE_PRIVS: 当前角色被赋予的角色
SESSION_ROLES: 当前用户被激活的角色 USER_ROLE_PRIVS: 当前用户被授予的角色
2.2:另外还有针对表的访问权限的视图:
TABLE_PRIVILEGES ALL_TAB_PRIVS ROLE_TAB_PRIVS: 某个角色被赋予的相关表的权限