有四个普通用户red,blue,green,pink。其中pink用户有一张emp表。按照以下步骤① 以system用户登录,执行
grant select on pink.emp to red with grant option;② 以red用户登录,执行
grant select on pink.emp to blue,green;③ 以blue用户登录,执行
revoke all on pink.emp from red;结果:system和red有权限查询pink.emp表,而blue和green无此权限。④ 再次以red用户登录,执行
revoke all on pink.emp from system;结果:system和red仍然有权限查询pink.emp表。
被以上结果搞糊涂了,半天没明白为什么……
谁能详细解释一下?
grant select on pink.emp to red with grant option;② 以red用户登录,执行
grant select on pink.emp to blue,green;③ 以blue用户登录,执行
revoke all on pink.emp from red;结果:system和red有权限查询pink.emp表,而blue和green无此权限。④ 再次以red用户登录,执行
revoke all on pink.emp from system;结果:system和red仍然有权限查询pink.emp表。
被以上结果搞糊涂了,半天没明白为什么……
谁能详细解释一下?
grant select on pink.emp to blue,green;
这步没报错?
不是自己的表,自己又不是dba,没法把别人的表的select权限赋予其他人的.
对象权限的取消者必须是该权限的授予者。
由于 blue 用户不是 red 用户在 pink.emp 表上的 select 权限的授予者,因此无法取消此权限。red 用户更不可能取消 system 用户在 pink.emp 表上的权限,因为 system 拥有 dba 角色,其中包含 select any table 等系统权限。
在做OCP题目的时候碰到的,不太明白就问了
① 以system用户登录,执行
grant select on pink.emp to red with grant option;然后再执行第②步试试?
嗯,blue用户的确不具备撤销red用户在pink.emp表上的权限,结果也证明了这一点。
结果同时表明,blue用户将red用户赋予自己的权限撤销了。导致这一现象的语句是
③ 以blue用户登录,执行
revoke all on pink.emp from red;针对这一点,我感到很不解……
③ 以blue用户登录,执行
revoke all on pink.emp from red;
---------------------------------------------------------------------------------------
对于这一点的解释是,blue 用户具有 GRANT ANY OBJECT PRIVILEGE 系统权限,且 red 用户在 pink.emp 表上的权限是 red 用户通过 GRANT ANY OBJECT PRIVILEGE 系统权限代表 pink.emp 表的所有者授予自己的。
-------------------------------------------------------------------------------------
您提到了GRANT ANY OBJECT PRIVILEGE 系统权限,非常有建设性。
那么我是不是可以这样理解:
red用户拥有的权限:
(1) select on pink.emp(授予者是system)
(2) GRANT ANY OBJECT PRIVILEGE(授予者是system)
blue用户拥有的权限:
(1) select on pink.emp(授予者是red,实质授予者上是system)根据“权限只能由其授予者或dba才能撤销”这一法则,可以认为blue用户不具备撤销自身权限的能力,而且也不具备撤销red用户权限的能力(因为red用户的权限授予者是system),因此以下两条语句都不能执行。
revoke select on wilson.employees from priestmoon;
revoke select on wilson.employees from red;那么这就产生一个关键问题:
既然blue不能撤销red的权限,那么为什么步骤③语句可以顺利执行呢?
不仅如此,还能产生撤销blue对pink.emp表查询权限的作用,这又是为什么?
③ revoke all on pink.emp from red;
---------------------------------------------------------------------------------
在red用户下,执行
select * from user_sys_privs;
并没有发现GRANT ANY OBJECT PRIVILEGE这个权限……
select * from user_sys_privs;
并没有发现GRANT ANY OBJECT PRIVILEGE这个权限……
------------------------------------------------
这个就是权限的级联取消。如果一个用户所拥有的对象权限被取消,则用户使用此权限的 GRANT OPTION 选项授予其他用户的权限也会被同时取消,依次类推。