grant with admin option and grant with grant option

通过grant语句可以将系统权限和角色授予用户或者角色。但是必须满足如下的条件:

  • 对于系统权限,执行用户需要具有 GRANT ANY PRIVILEGE权限或者具有被授予的权限(WITH ADMIN OPTIONS)
  • 对于角色,执行用户需要具有GRANT ANY ROLE系统权限或者具有被授予角色(with admin options)

with admin option:

  • 只是针对系统权限和角色,对于对象权限不可以使用
  • 被授予用户可以授予或者回收其该系统权限或者角色,用户不可以回收自己的权限和角色
  • 被授予用户可以使用该权限和角色的with admin option选项
  • 被授予用户可以删除或者更改被授予的角色(drop or alter)

with grant option:

  • 只限于对象权限,
  • 必须是对象的拥有者,或者具有grant any object privilege系统权限,或者具有相应权限(with grant option)
  • 如果用户具有某表的对象权限(with grant option),并依附该表创建视图,那么该用户可以授权视图的权限给其他用户
  • 当我们将对象权限(with grant option)赋予某角色,拥有该角色的用户不会继承或者传播WITH GRANT OPTION

如果某个用户具有GRANT ANY OBJECT PRIVILEGE系统权限,那么他可以管理其他用户的对象权限。此时在dba_tab_privs中相应记录的grantor字段值为对象的拥有者,即GRANT ANY OBJECT PRIVILEGE具有替代对象拥有者执行权限管理的特点。

如果某个用户A,具有其他用户B的对象权限(with grant option),那么当用户A授权该对象权限给其他用户时,DBA_TAB_PRIVS 中的对应GRANTOR字段为用户A。

SQL> grant grant any object privilege to scott;
SQL> conn scott/tiger
已连接。
SQL> grant select  on easy.tab1 to tts with grant option;

授权成功。

SQL> grant select  on easy.tab1 to abcd ;

授权成功。
SQL> CONN tts/tts
已连接。
SQL> show user
USER 为 "TTS"
SQL> grant select on easy.tab1 to sh;
SQL> /

GRANTEE 		       GRANTOR			      PRIVILEGE 			       GRA
------------------------------ ------------------------------ ---------------------------------------- ---
SH			       TTS			      SELECT				       NO
ABCD			       EASY			      SELECT				       NO
TTS			       EASY			      SELECT				       YES
我们还可以在列级别管理用户的对象权限,例如

GRANT INSERT (acct_no) ON accounts TO psmith;

另外,通过VPD和ORACLE Label Security(OLS),ORACLE 为我们提供了行级别的控制能力,有兴趣的同学可以查看官方文档。


贴士:我们可以使用grant语句来创建用户,例如GRANT CREATE SESSION TO NEW_USER IDENTIFIED BY PASSWORD,如果new_user不存在,则以password为密码创建用户new_user。

贴士:系统权限和对象权限不可以在同一个grant语句中赋予。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值