🚀 WITH OPTION操作实验
-
1. 什么是
WITH ADMIN OPTION?WITH ADMIN OPTION的意思是被授予该权限的用户有权将某个他已有的系统权限授予其他用户或角色。
- 两个特点:
1)如果用户使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即A授予B系统权限,B授予C系统权限,如果A收回B的系统权限,C的系统权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
- 授予或者撤回使用WITH ADMIN OPTION语句的系统权限
-
2.
WITH ADMIN OPTION实验- 1. 使用SYS用户做以下操作
创建两个用户A和B并赋予密码,并且创建时两个用户均为非锁定状态:
CREATE USER a IDENTIFIED BY oracle ACCOUNT UNLOCK; CREATE USER b IDENTIFIED BY oracle ACCOUNT UNLOCK;
- 2. 检查当前用户系统权限
SELECT grantee,privilege FROM dba_sys_privs WHERE grantee='A'; SELECT grantee,privilege FROM dba_sys_privs WHERE grantee='B';
- 3. SYS赋予权限
SYS下赋予A用户
CREATE SESSION系统权限的同时并赋予WITH ADMIN OPTION;权限GRANT CREATE SESSION TO a WITH ADMIN OPTION;
- 4. 检查A用户系统权限
SELECT grantee,privilege FROM dba_sys_privs WHERE grantee='A';
- 5. 使用A用户登录到ORACLE数据库中
conn a/oracle- 6. 使用A用户赋予B用户create session权限
GRANT CREATE SESSION TO b;
- 7. 登录回SYS用户,用SYS用户检查B用户的系统权限
SELECT grantee,privilege FROM dba_sys_privs WHERE grantee='B';
- 8. 使用SYS用户收回A用户的CREATE SESSION系统权限
REVOKE CREATE SESSION FROM a;
- 9. 检查A用户和B用户现在的系统权限
SELECT grantee,privilege FROM dba_sys_privs WHERE grantee='A'; SELECT grantee,privilege FROM dba_sys_privs WHERE grantee='B';
我们发现A用户的CREATE SESSION系统权限被收回了,但是B用户的CREATE SESSION系统权限没有被收回。
[!TIP]
结论: 被WITH ADMIN OPTION权限赋予的账户B的系统权限,在赋权账户A的系统权限被收回时,用户B的系统权限不被级联收回。系统权限可以跨用户收回。
-
3. 什么是
WITH GRANT OPTION?WITH GRANT OPTION的意思是被授予该权限的用户有权将某个他已有的对象权限授予其他用户或角色。
- 一个特点:
如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消WITH GRANT OPTION授权是级联的。
- 授予或者撤回使用WITH GRANT OPTION语句的对象权限
-
4.
WITH GRAT OPTION实验- 1. 首先使用sys用户赋予a、b用户
CREATE SESSION系统权限:
GRANT CREATE SESSION TO a; GRANT CREATE SESSION TO b;
- 2. 先检查A用户和B用户的对象权限:
SET LINES 300 SET PAGES 20 COL GRANTEE FOR A20 COL OWNER FOR A20 COL TABLE_NAME FOR A20 COL PRIVILEGE FOR A20 SELECT GRANTEE,OWNER,TABLE_NAME,PRIVILEGE FROM user_tab_privs WHERE grantee='A'; SELECT GRANTEE,OWNER,TABLE_NAME,PRIVILEGE FROM user_tab_privs WHERE grantee='B';
- 3. 切换到HR用户:
CONN hr/hr- 4. 使用HR用户把
EMPLOYEES表的SELECT ON对象权限赋予给A用户,并且需要对A再另赋WITH GRANT OPTION权限:
GRANT SELECT ON EMPLOYEES TO a WITH GRANT OPTION;
- 5. 赋权结束后检查A用户权限:
SELECT GRANTEE,OWNER,TABLE_NAME,PRIVILEGE from user_tab_privs WHERE grantee='A';
- 6. 切换到A用户下,并使用A用户对B用户赋予SELECT ON EMOLOYEES权限。
conn a/oracle GRANT SELECT ON HR.EMPLOYEES TO b;
==这里需要注意的是由于目前用户不是HR用户,所以a用户对b用户赋予SELECT ON EMPLOYEES对象权限时,要特别指定表的归属用户HR。==
- 7. 检查B用户的对象权限:
SELECT GRANTEE,OWNER,TABLE_NAME,PRIVILEGE from user_tab_privs WHERE grantee='B';
- 8. 切换回HR用户:
conn hr/hr- 9. 从A用户上收回SELECT ON EMPLOYEES对象权限。
REVOKE SELECT ON EMPLOYEES FROM a;
- 10. 检查A用户和B用户的对象权限:
SELECT GRANTEE,OWNER,TABLE_NAME,PRIVILEGE FROM user_tab_privs WHERE grantee='A'; SELECT GRANTEE,OWNER,TABLE_NAME,PRIVILEGE FROM user_tab_privs WHERE grantee='B';
我们发现A用户和B用户的SELECT ON EMPLOYEES对象权限已都被收回了。
因此我们得出结论,被WITH GRANT OPTION权限赋予的对象权限,在赋权用户的该对象权限被收回时,被WITH GRANT OPTION授予用户的对象权限也一并被级联收回。
- 1. 首先使用sys用户赋予a、b用户
-
5. 思考:对象权限是否可以跨用户收回?
SELECT * FROM dba_sya_privs WHERE grantee='COONNECT';