本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个回收可以成功执行?

1. 在CDB级别中对用户进行权限回收,不带 container 子句的效果;

2. 在CDB级别中对用户进行权限回收,带 container=all 子句的效果;

3. 在CDB级别中对用户进行权限回收,带 container=current 子句的效果;

4. 在PDB级别中对用户进行权限回收,不带 container 子句的效果;

5. 在PDB级别中对用户进行权限回收,带 container=all 子句的效果;

6. 在PDB级别中对用户进行权限回收,带 container=current 子句的效果;

请熟悉创建用户作用域创建角色作用域授权作用域。本篇将在以上理论基础上进行演示。

演示数据库版本:18.3.0.0.0(18c)

权限回收,针对的是授权,我们回顾下授权的作用域范围:需要注意的是,在考试中,经常考到在CDB级别授权及回收权限的作用域。

1. 在CDB级别中对用户进行授权,不带 container 子句的效果: 仅作用于当前CDB

2. 在CDB级别中对用户进行授权,带 container=all 子句的效果:作用于当前CDB和所有PDB

3. 在CDB级别中对用户进行授权,带 container=current 子句的效果:仅作用于当前CDB

4. 在PDB级别中对用户进行授权,不带 container 子句的效果:仅作用于当前PDB

5. 在PDB级别中对用户进行授权,带 container=all 子句的效果:X错误X PDB级别不能使用 ALL

6. 在PDB级别中对用户进行授权,带 container=current 子句的效果:仅作用于当前PDB

对于授权作用域,我们总结成三句话:也就是授权一共3种情况仅作用于CDB作用于全局仅作用于PDB

仅作用于CDB:CDB级别不带子句或带了 current 都只作用于当前CDB

作用于全局:CDB级别如果带了 ALL,将作用于CDB和所有PDB全局

仅作用于PDB:PDB级别不带子句或带了 current 都只作用于当前PDB,无法带 ALL

注意:以上3种情况的授权,分别又对应3种回收选项(不带子句,带 all,带 current),所以共计9种情况,逐个讨论。

情况一:CDB授权作用于当前CDB,回收不带子句

创建用户 c##r1 并授权。符号 '<>' 代表默认值可省略

SQL> create user c##r1 identified by r1 <container=all>; ---用户默认作用于全局容器

User created.

SQL> grant create session to c##r1 <container=current>; ---授权默认作用于当前容器CDB

Grant succeeded.

所有容器均存在用户 c##r1 ,但只有CDB级别可以登录,PDB无法登陆。

回收权限,不带子句

SQL> revoke create session from c##r1;

Revoke succeeded.

SQL> conn c##r1/r1@cdb18c;
ERROR:
ORA-01045: user C##R1 lacks CREATE SESSION privilege; logon denied

不带子句,回收成功,默认作用于当前CDB,回收后,无法登陆。

情况二:CDB授权作用于当前CDB,回收带 ALL

创建用户 c##r2 并授权。

SQL> create user c##r2 identified by r2;

User created.

SQL> grant create session to c##r2;

Grant succeeded.

所有容器均存在用户 c##r2 ,但只有CDB级别可以登录,PDB无法登陆。

回收权限,子句带 ALL

SQL> revoke create session from c##r2 container=all;
revoke create session from c##r2 container=all
*
ERROR at line 1:
ORA-65092: system privilege granted with a different scope to 'C##R2'

子句带 ALL,将报错。因授权只针对当前CDB生效,所以回收无法针对所有容器回收。

情况三:CDB授权作用于当前CDB,回收带 CURRENT

创建用户 c##r3 并授权。

SQL> create user c##r3 identified by r3;

User created.

SQL> grant create session to c##r3;

Grant succeeded.

所有容器均存在用户 c##r3 ,但只有CDB级别可以登录,PDB无法登陆。

回收权限,子句带 CURRENT

SQL> revoke create session from c##r3 container=current;

Revoke succeeded.

SQL> conn c##r3/r3@cdb18c;
ERROR:
ORA-01045: user C##R3 lacks CREATE SESSION privilege; logon denied

子句带 CURRENT,回收成功,作用于当前CDB,回收后,无法登陆。

情况四:CDB授权作用于全局容器,回收不带子句

创建用户 c##r4 并授权。

SQL> create user c##r4 identified by r4;

User created.

SQL> grant create session to c##r4 container=all;

Grant succeeded.

所有容器均存在用户 c##r4 ,且CDB和所有PDB均可登录。

回收权限,不带子句

SQL> revoke create session from c##r4;
revoke create session from c##r4
*
ERROR at line 1:
ORA-65092: system privilege granted with a different scope to 'C##R4'

不带子句,回收失败。因授权针对的是全局容器生效,所以回收无法针对当前CDB容器进行回收。---OCP考试内容

情况五:CDB授权作用于全局容器,回收带 ALL

创建用户 c##r5 并授权。

SQL> create user c##r5 identified by r5;

User created.

SQL> grant create session to c##r5 container=all;

Grant succeeded.

所有容器均存在用户 c##r5 ,且CDB和所有PDB均可登录。

回收权限,子句带 ALL

SQL> revoke create session from c##r5 container=all;

Revoke succeeded.

SQL> conn c##r5/r5@cdb18c; ---CDB无法登陆
ERROR:
ORA-01045: user C##R5 lacks CREATE SESSION privilege; logon denied Warning: You are no longer connected to ORACLE. SQL> conn c##r5/r5@orders; ---PDB无法登陆
ERROR:
ORA-01045: user C##R5 lacks CREATE SESSION privilege; logon denied

子句带 ALL,回收成功。针对所有容器,CDB及PDB将无法登陆。

情况六:CDB授权作用于全局容器,回收带 CURRENT

创建用户 c##r6 并授权。

SQL> create user c##r6 identified by r6;

User created.

SQL> grant create session to c##r6 container=all;

Grant succeeded.

所有容器均存在用户 c##r6 ,且CDB和所有PDB均可登录。

回收权限,子句带 CURRENT

SQL> revoke create session from c##r6 container=current;
revoke create session from c##r6 container=current
*
ERROR at line 1:
ORA-65092: system privilege granted with a different scope to 'C##R6'

带 current 回收失败。因授权针对的是全局容器生效,所以回收无法针对当前CDB容器进行回收。

情况七:PDB自己授权,回收不带子句

CDB创建用户 c##r7

SQL> create user c##r7 identified by r7;

User created.

所有容器均存在用户 c##r7 ,且CDB和所有PDB现在都不可以登陆。

PDB单独对 c##r7 用户进行授权。

SQL> alter session set container=orders;

Session altered.

SQL> grant create session to c##r7; ---PDB级别默认授权为 CURRENT,无法进行 ALL 授权

Grant succeeded.

结果为PDB可登录了,CDB无法登陆

SQL> conn c##r7/r7@cdb18c; ---CDB无法登陆
ERROR:
ORA-01045: user C##R7 lacks CREATE SESSION privilege; logon denied Warning: You are no longer connected to ORACLE. SQL> conn c##r7/r7@orders; ---PDB可登陆
Connected.

CDB尝试回收

SQL> conn / as sysdba
Connected.
SQL> revoke create session from c##r7;
revoke create session from c##r7
*
ERROR at line 1:
ORA-01952: system privileges not granted to 'C##R7'

报错,原因是CDB级别根本没有进行授权。

PDB自己尝试回收

SQL> conn sys/oracle@orders as sysdba
Connected.
SQL> revoke create session from c##r7; Revoke succeeded.

也就是说:PDB级别自己针对公共用户的授权,只能由PDB级别自己管理,CDB无法进行权限回收。

情况八:PDB自己授权,回收带 ALL

CDB创建用户 c##r8,PDB级别自己授权

SQL> conn / as sysdba
Connected.
SQL> create user c##r8 identified by r8; User created. SQL> alter session set container=orders; Session altered. SQL> grant create session to c##r8; Grant succeeded.

结果为PDB可登录,CDB无法登陆

PDB 带子句 ALL 进行回收

SQL> revoke create session from c##r8 container=all;
revoke create session from c##r8 container=all
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database

报错,在PDB级别操作不被允许,无法使用子句 container=all

情况九:PDB自己授权,回收带 CURRENT

CDB创建用户 c##r9,PDB级别自己授权

SQL> conn / as sysdba
Connected.
SQL> create user c##r9 identified by r9; User created. SQL> alter session set container=orders; Session altered. SQL> grant create session to c##r9; Grant succeeded.

结果为PDB可登录,CDB无法登陆

PDB 带子句 CURRENT 进行回收

SQL> revoke create session from c##r9 container=current;

Revoke succeeded.

回收成功,PDB级别默认和CURRENT情况一致。

综上:

情况一:CDB授权作用于当前CDB,回收不带子句     回收当前CDB权限

情况二:CDB授权作用于当前CDB,回收带 ALL        X错误X

情况三:CDB授权作用于当前CDB,回收带 CURRENT   回收当前CDB权限

-----------------------------------------------------------------------------------------------------------

情况四:CDB授权作用于全局容器,回收不带子句      X错误X

情况五:CDB授权作用于全局容器,回收带 ALL      回收全局容器权限

情况六:CDB授权作用于全局容器,回收带 CURRENT   X错误X

-----------------------------------------------------------------------------------------------------------

情况七:PDB自己授权,回收不带子句           回收当前PDB权限

情况八:PDB自己授权,回收带 ALL           X错误X

情况九:PDB自己授权,回收带 CURRENT        回收当前PDB权限

理解 Oracle 多租户体系中(12c,18c,19c)Revoke 回收权限作用域范围的更多相关文章

  1. 理解 Oracle 多租户体系中(12c,18c,19c)Grant授权作用域范围

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个授权可以成功执行? 1. 在CDB级别中对用户进行授权,不带 container 子句的效果: 2. 在CDB级别中对用户进行授权,带 co ...

  2. 理解 Oracle 多租户体系中(12c,18c,19c)创建角色作用域范围

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建角色? 1. 在CDB级别中创建公共角色,不带 container 子句的效果: 2. 在CDB级别中创建公共角色,带 cont ...

  3. 理解 Oracle 多租户体系中(12c,18c,19c)创建用户作用域范围

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建用户? 1. 在CDB级别中创建公共用户,不带 container 子句的效果: 2. 在CDB级别中创建公共用户,带 cont ...

  4. Oracle 12c 多租户家族(12c 18c 19c)如何在 PDB 中添加 HR 模式

    Oracle 12c 多租户家族(12c [12.2.0.1].18c [12.2.0.2].19c [12.2.0.3])如何在 PDB 中添加模式:19c (19.3) 手工添加示例 HR 用户 ...

  5. OCP培训 Oracle 12c/18c/19c OCP认证实战培训【送OCP优惠名额】

    一.OCP培训 Oracle 12c/18c/19c OCP认证全套实战培训[送OCP优惠名额],本课程内容 课程目标: 为满足想参加Oracle OCP考证的学员,风哥设计的一套比较全面OCP实战培 ...

  6. 深入理解Oracle RAC 12c 笔记

    深入理解Oracle RAC 12c 跳转至: 导航. 搜索 文件夹 1 概述 2 集群件管理和故障诊断 3 执行实践 4 新特性 5 存储和ASM 6 应用设计上的问题 7 管理和调优一个复杂的RA ...

  7. 理解oracle中连接和会话

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp44 理解oracle中连接和会话 1.  概念不同:概念不同: 连接是指物 ...

  8. 前端知识体系:JavaScript基础-原型和原型链-理解原型设计模式以及 JavaScript中的原型规则

    理解原型设计模式以及 JavaScript中的原型规则(原文地址) 1.原型对象:我们创建的每一个函数(JavaScript中函数也是一个对象)都有一个原型属性 prototype,原型属性实质上是一 ...

  9. ORACLE--12C--多租户体系架构概念

    一,概念 1,何为多租户? 官网链接: 飞机直达>> 多租户这个概念并不是12C的新特性,而是体系架构,多租户架构使得oracle 数据库成为了一个多租户的容器数据库,也就是contain ...

随机推荐

  1. RequestFacade对象获取请求头时忽略大小写

    也许在Controller层 在RequestFacde文件中getHeader函数逻辑实现如下所示: public String getHeader(String name) { if(this.r ...

  2. Python 编程入门(3):算术和表达式

    以下所有例子都基于最新版本的 Python,为了便于消化,每一篇都尽量短小精悍,希望你能尽力去掌握 Python 编程的「概念」,可以的话去动手试一下这些例子(就算目前还没完全搞懂),加深理解. 计算 ...

  3. C#设计模式学习笔记:(7)桥接模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7699301.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第二个模式--桥 ...

  4. 如何阻止a标签跳转

    <a href="www.baidu.com">百度</a> 上面为我们的a标签,要想阻止它进行跳转我们该怎么办呢? 当然我们有以下的几种办法_______ ...

  5. python格式化输出保留2位小数

    我是小白就不用多说了,学习python做了个练习题,结果运行了一遍,发现输入金额后得到的有很多位小数, 虽然不知道为什么,但是看得很不舒服, 就想到应该把让小数点后只保留2位数 找到了方法:将{0}改 ...

  6. bzoj3162独钓寒江雪

    题意 \(n\)阶树,求本质不同的独立集个数 做法 重新编号后重心是不变的,如果有两个重心,可以加个虚点 用树哈希判子树有多少个相同的子树,设某种有\(k\)个,如果原本方案数为\(x\)个 则方案数 ...

  7. PMP--1.2 PMBOK指南组成部分

    图1.2.5 ​ PMBOK指南关键组成部分在项目中的相互关系说明:项目生命周期中包含项目阶段,项目阶段结束之后就是阶段关口: 而项目管理过程和项目管理过程组以及项目管理知识领域都是为了项目生命周期服 ...

  8. 一起学Vue之条件判断

    在Vue进行前端开发中,条件判断主要用于根据不同的条件来决定显示或隐藏,或者进行视图之间的切换,本文以一个简单的小例子简述v-if的常见用法,仅供学习分享使用,如有不足之处,还请指正. v-if 指令 ...

  9. HTML5文档类型如何定义,有哪些标签,以及如何使用,从整体认识HTML5

    html5新增结构标签 header 头部 nav 导航 section 区域 article 文章 aside 侧边栏 figure 一组多媒体内容 figcaption 多媒体内容的标题 foot ...

  10. BZOJ2005: [Noi2010]能量采集(欧拉函数)

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种 ...