有四个普通用户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表。
被以上结果搞糊涂了,半天没明白为什么……
谁能详细解释一下?

解决方案 »

  1.   

    ② 以red用户登录,执行
    grant select on pink.emp to blue,green;
    这步没报错?
    不是自己的表,自己又不是dba,没法把别人的表的select权限赋予其他人的.
      

  2.   

    楼上说得对,不是自己的表没有dba的权限的用户无法授予其他用户的权限的!经试验确实汇报错误!
      

  3.   

    red 用户只要具有 GRANT ANY OBJECT PRIVILEGES 系统权限,便可以 grant select on pink.emp to blue,green; 这一点可能 lz 没有说明。对于 lz 的疑问有以下两点需要注意:
    对象权限的取消者必须是该权限的授予者。
    由于 blue 用户不是 red 用户在 pink.emp 表上的 select 权限的授予者,因此无法取消此权限。red 用户更不可能取消 system 用户在 pink.emp 表上的权限,因为 system 拥有 dba 角色,其中包含 select any table 等系统权限。
      

  4.   


    在做OCP题目的时候碰到的,不太明白就问了
      

  5.   

    第①步执行了吗?
    ① 以system用户登录,执行
    grant select on pink.emp to red with grant option;然后再执行第②步试试?
      

  6.   


    嗯,blue用户的确不具备撤销red用户在pink.emp表上的权限,结果也证明了这一点。
    结果同时表明,blue用户将red用户赋予自己的权限撤销了。导致这一现象的语句是
    ③ 以blue用户登录,执行
    revoke all on pink.emp from red;针对这一点,我感到很不解……
      

  7.   

    blue用户将red用户赋予自己的权限撤销了。导致这一现象的语句是
    ③ 以blue用户登录,执行
    revoke all on pink.emp from red;
    ---------------------------------------------------------------------------------------
    对于这一点的解释是,blue 用户具有 GRANT ANY OBJECT PRIVILEGE 系统权限,且 red 用户在 pink.emp 表上的权限是 red 用户通过 GRANT ANY OBJECT PRIVILEGE 系统权限代表 pink.emp 表的所有者授予自己的。
      

  8.   

    对于这一点的解释是,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;
      

  9.   

    具有 GRANT ANY OBJECT PRIVILEGE 系统权限的用户是代表对象所有者将权限授予其他用户。同样,具有 GRANT ANY OBJECT PRIVILEGE 系统权限的用户也是代表对象所有者取消权限。因此,具有 GRANT ANY OBJECT PRIVILEGE 系统权限的用户只能取消那些由对象所有者授予的权限,包括具有 GRANT ANY OBJECT PRIVILEGE 系统权限的用户所授予的权限。
      

  10.   

    具有 GRANT ANY OBJECT PRIVILEGE 系统权限的用户是代表对象所有者将权限授予其他用户。同样,具有 GRANT ANY OBJECT PRIVILEGE 系统权限的用户也是代表对象所有者取消权限。因此,具有 GRANT ANY OBJECT PRIVILEGE 系统权限的用户只能取消那些由对象所有者授予的权限,包括具有 GRANT ANY OBJECT PR……
    ---------------------------------------------------------------------------------
    在red用户下,执行
    select * from user_sys_privs;
    并没有发现GRANT ANY OBJECT PRIVILEGE这个权限……
      

  11.   

    在red用户下,执行
    select * from user_sys_privs;
    并没有发现GRANT ANY OBJECT PRIVILEGE这个权限……
    ------------------------------------------------
    这个就是权限的级联取消。如果一个用户所拥有的对象权限被取消,则用户使用此权限的 GRANT OPTION 选项授予其他用户的权限也会被同时取消,依次类推。