1.查询当前用户所拥有的角色和角色的权限
select * from role_sys_privs;
结果:
ROLE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
CONNECT CREATE SESSION NO
YHYROLE CREATE ANY TABLE NO
2.查看当前用户拥有其他用户的表权限
select * from user_tab_privs;
结果:
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
-------- -------- ------------ --------- --------- --------- -------------
YHY SCOTT EMP SCOTT SELECT YES NO
YHY SCOTT EMPLOYEES SCOTT SELECT NO NO
3.查询所有用户,在dba角色下才能查询
是通过dba_users这个表进行查看,来看下他拥有的字段
desc dba_users;
结果:
名称 是否为空? 类型
----------------------------------------- -------- --------------
USERNAME NOT NULL VARCHAR2(30)
USER_ID NOT NULL NUMBER
PASSWORD VARCHAR2(30)
ACCOUNT_STATUS NOT NULL VARCHAR2(32)
LOCK_DATE DATE
EXPIRY_DATE DATE
DEFAULT_TABLESPACE NOT NULL VARCHAR2(30)
TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30)
CREATED NOT NULL DATE
PROFILE NOT NULL VARCHAR2(30)
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30)
EXTERNAL_NAME VARCHAR2(4000)
PASSWORD_VERSIONS VARCHAR2(8)
EDITIONS_ENABLED VARCHAR2(1)
AUTHENTICATION_TYPE VARCHAR2(8)
然后就可以查询了
select username from dba_users;
结果:
USERNAME
--------------
MGMT_VIEW
SYS
SYSTEM
DBSNMP
SYSMAN
YHY
SCOTT
YHY2
OUTLN
FLOWS_FILES
MDSYS
......
4.查询用户拥有的角色
SQL> desc dba_role_privs;
名称 是否为空? 类型
----------------------------------------- -------- ---------------
GRANTEE VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
DEFAULT_ROLE VARCHAR2(3)
YHY用户名必须大写,因为表里dba_role_privs的grantee字段值存的是大写用户名,ADM为yes表示可以把这个角色在往下给别人
SQL> select * from dba_role_privs where grantee='YHY';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
YHY CONNECT NO YES
YHY YHYROLE NO YES
5.查询角色或用户拥有的系统权限
SQL> select * from dba_sys_privs where grantee='CONNECT';
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
CONNECT CREATE SESSION NO
6.查询角色或用户拥有的对象权限
这个说明有T1标的crud等等权限
select * from dba_tab_privs where grantee='YHYROLE';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
------- ----- ---------- -------- --------- ---------- ---------
YHYROLE YHY T1 YHY DEBUG NO NO
YHYROLE YHY T1 YHY UPDATE NO NO
YHYROLE YHY T1 YHY SELECT NO NO
YHYROLE YHY T1 YHY INSERT NO NO
YHYROLE YHY T1 YHY DELETE NO NO
YHYROLE YHY T1 YHY ALTER NO NO
7.使用with grant option
说明可参考:https://blog.csdn.net/fjseryi/article/details/51161129
有三个用户scott,yhy,yhy2
任务说明:scott查询权限给yhy,yhy再把查询scott权限给yhy2,然后在进行撤销权限
1.在登录scott用户下,授予yhy查询emp表权限,并带上with grant option,可以让yhy在进行授权
grant select on emp to yhy with grant option;
2.切换到yhy,发现可以查询scott的emp表
select * from scott.emp;
接着可以把 查询scott的emp表的权限 在授予 yhy2
grant select on scott.emp to yhy2;
3.切换到yhy2,发现可以查询scott的emp表
select * from scott.emp;
4.再次切回scott,发现无法对yhy2权限明显的回收,只能对下一级yhy回收
conn scott/tiger;
revoke select on emp from yhy2;
提示ORA-01927: 无法对您未授权的权限进行 REVOKE
回收yhy权限
revoke select on emp from yhy;
撤销成功。
5.然后切回yhy2,执行查询,发现不存在表,因为已经无权限了
select * from scott.emp
ORA-00942: 表或视图不存在