有四个普通用户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表。
被以上结果搞糊涂了,半天没明白为什么……
谁能详细解释一下?
解决方案 »
- linux下启动oracle报Connected to an idle instance.
- 关于dmp文件 导入,导出极其各参数详解?
- orcle数据链路问题,请教了。急
- 监听死活起不来,那个大侠帮我一下呢
- 多表查询,有点难
- 一个关于用OMS做ORACLE备份的问题
- 我误将表空间文件tj_data.DBF 删除,进入sql/plus时就提示初始化错误!!
- 太菜的问题,Oracle中怎样给一个变量赋值?
- 可以在一个进程的不同线程里分别建立多个oracle连接吗?
- 求助大神!!!
- 怎样通过SCN值来恢复已经删除的数据
- oracle中如何将当前登录用户的表,包,函数,存储过程,触发器等等,复制到另一个已创建好的用户中
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 选项授予其他用户的权限也会被同时取消,依次类推。