oracle 查询权限,用户,with grant option的用法

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查询权限给yhyyhy再把查询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: 表或视图不存在

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值