本帖最后由 kevin.zhang 于 2010-12-16 11:30 编辑
有人问,我的用户A明明查不到具有某个权限,为什么能进行一些‘越权’的操作呢?
下面我们以用户CATALOGADMIN为例查询其所有的权限:
1.查询系统权限:
duck_11 > select GRANTEE,PRIVILEGE from DBA_sys_privs where GRANTEE='CATALOGADMIN';
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
CATALOGADMIN UNLIMITED TABLESPACE
2.查询对象权限:
duck_11 > select GRANTEE,PRIVILEGE from dba_tab_privs where GRANTEE='CATALOGADMIN';
no rows selected
3.用户CATALOGADMIN通过角色拥有的权限是不会显示在上面2个查询中的,所以继续查询用户CATALOGADMIN被赋予的角色:
duck_11 > select GRANTEE,GRANTED_ROLE from dba_role_privs where grantee='CATALOGADMIN';
GRANTEE GRANTED_ROLE
------------------------------ ------------------------------
CATALOGADMIN ZYF
CATALOGADMIN RECOVERY_CATALOG_OWNER
CATALOGADMIN RESOURCE
CATALOGADMIN CONNECT
4.进一步查询角色所拥有的系统和对象权限,如ZYF:
duck_11 > select ROLE,PRIVILEGE From role_sys_privs where role='ZYF';
ROLE PRIVILEGE
------------------------------ ----------------------------------------
ZYF CREATE ANY TABLE
duck_11 > select ROLE,OWNER,TABLE_NAME,PRIVILEGE From role_tab_privs where role='ZYF';
ROLE OWNER TABLE_NAME PRIVILEGE
------------------------------ ---------- ------------------------------ ----------------------------------------
ZYF SYS DBA_USERS SELECT
5.注意,角色也是可以赋予角色的,而角色ZYF通过被赋予其它角色而获得的权限同样不会在第4步中显示出来,所以继续查询角色ZYF可能拥有的角色:
duck_11 > select * from role_role_privs where role='ZYF';
ROLE GRANTED_ROLE ADM
------------------------------ ------------------------------ ---
ZYF EXP_FULL_DATABASE NO
6.重复第3至第5步,直到所有嵌套的角色都被查询过。
|
|