本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建角色?

1. 在CDB级别中创建公共角色,不带 container 子句的效果;

2. 在CDB级别中创建公共角色,带 container=all 子句的效果;

3. 在CDB级别中创建公共角色,带 container=current 子句的效果;

4. 在PDB级别中创建本地角色,不带 container 子句的效果;

5. 在PDB级别中创建本地角色,带 container=all 子句的效果;

6. 在PDB级别中创建本地角色,带 container=current 子句的效果;

在理解上面问题之前,我们需要提前约定,就是需要提前知道:

1. CDB级别创建的角色称为公共角色PDB级别创建的角色称为本地角色

2. 公共用户和角色命名规则对应参数 common_user_prefix ,该参数值默认为 C##。所以,在CDB级别创建公共用户或角色,需要带 C##(也可以更改参数值,但不建议)。

3. PDB$SEED 仅为种子容器,对应 CON_ID 为 2,只读模式,不参与讨论。

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

目录

1. CDB 不带 container 默认

2. CDB带 container=all

3. CDB带 container=current

4. PDB不带 container 默认

5. PDB带 container=all

6. PDB带 container=current

1. CDB 不带 container 默认

首先,CDB创建公共角色,如果没有带前缀,将报错

SQL> create role crole1;
create role crole1
*
ERROR at line 1:
ORA-65096: invalid common user or role name

创建不带任何子句的公共角色

SQL> create role c##crole1;

Role created.

SQL> set linesize 200
SQL> col role for a20
SQL> select role,common,con_id from cdb_roles where role='C##CROLE1'; ROLE COMMON CON_ID
-------------------- ------ ----------
C##CROLE1 YES 1
C##CROLE1 YES 3

结果作用域范围是:当前CDB和所有PDB生效。

2. CDB带 container=all

SQL> create role c##crole2 container=all;

Role created.

SQL> select role,common,con_id from cdb_roles where role='C##CROLE2';

ROLE             COMMON    CON_ID
-------------------- ------ ----------
C##CROLE2 YES 1
C##CROLE2 YES 3

结果作用域范围是:当前CDB和所有PDB生效。和不带子句效果一致。

3. CDB带 container=current

SQL> create role c##crole3 container=current;
create role c##crole3 container=current
*
ERROR at line 1:
ORA-65094: invalid local user or role name

结果作用域范围是:报错,公共角色无法进行本地创建

4. PDB不带 container 默认

首先,PDB级别在本地能否创建以c##前缀开头的公共角色?

SQL> alter session set container=orders;

Session altered.

SQL> create role c##crole4;
create role c##crole4
*
ERROR at line 1:
ORA-65094: invalid local user or role name

结果作用域范围是:报错,PDB级别是无法创建公共角色的

SQL> create role prole1;

Role created.

SQL> select role,common,con_id from cdb_roles where role='PROLE1';

ROLE             COMMON    CON_ID
-------------------- ------ ----------
PROLE1 NO 3

结果作用域范围是:仅当前PDB级别生效。

5. PDB带 container=all

SQL> create role prole2 container=all;
create role prole2 container=all
*
ERROR at line 1:
ORA-65050: Common DDLs only allowed in root.

结果作用域范围是:报错,PDB本地数据库中是无法通过 container=all 创建角色的。

6. PDB带 container=current

SQL> create role prole2 container=current;

Role created.

SQL> select role,common,con_id from cdb_roles where role='PROLE2';

ROLE             COMMON    CON_ID
-------------------- ------ ----------
PROLE2 NO 3

结果作用域范围是:仅当前PDB级别生效。

综上:角色创建作用域范围和用户一致

1. 在CDB级别中创建公共角色,不带 container 子句的效果: 作用于当前CDB和所有PDB

2. 在CDB级别中创建公共角色,带 container=all 子句的效果:作用于当前CDB和所有PDB

3. 在CDB级别中创建公共角色,带 container=current 子句的效果:X错误X CDB级别不能使用 CURRENT

4. 在PDB级别中创建本地角色,不带 container 子句的效果:作用于当前PDB

5. 在PDB级别中创建本地角色,带 container=all 子句的效果:X错误X PDB级别不能使用 ALL

6. 在PDB级别中创建本地角色,带 container=current 子句的效果:作用于当前PDB

理解 Oracle 多租户体系中(12c,18c,19c)创建角色作用域范围的更多相关文章

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

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

  2. 理解 Oracle 多租户体系中(12c,18c,19c)Revoke 回收权限作用域范围

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

  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. MYSQL5.7进阶之主从复制

    主从复制是msql数据库的高可用 读写分离 容灾备份 等的基本要求 在这主从复制之前我们需要准备以下条件 保证master数据库和从数据库的mysql版本一致 matser和从数据防火墙关闭 数据库端 ...

  2. 学习 Vim 命令总结

    学习 Vim 命令总结 可以使用 vscode-vim 扩展,但是要注意一些ctrl+字母的快捷键会无效,必须去掉冲突的快捷键 esc 回到普通模式 i 普通模式进入插入模式 : 进入命令模式 :wa ...

  3. Blazor client-side + webapi (.net core 3.1) 添加jwt验证流程(非host)第三章 客户端存储及验证

    准备工作: 安装Nuget包:Blazored.LocalStorge. 这是一个client-side 浏览器存储库,找了非常久. 官方文档中也有一款Microsoft.AspNetCore.Pro ...

  4. C#实现的Table的Merge,以及实现Table的Copy和Clone

    C#实现的对两个Table进行Merge,两表必须存在至少一个公共栏位作为连接项,否则连接就失去了意义.如下是对两个table进行Merge的详细代码: private void button1_Cl ...

  5. SpringCloud入门学习

    我相信,如果小伙伴们能来到这里,肯定对微服务有一定的认识. 我们之前创建web项目的时候,常见的有两种方式: 1).创建一个war包,然后放在servlet容器中运行(比如Tomcat等); 2).使 ...

  6. 简单配置让iterm2用得更爽

    同步自本人独立博客:https://liushiming.cn/2020/01/15/awesome-iterm2-config/ 概述 iterm2比mac原生的terminal好用很多,是mac下 ...

  7. 《手把手教你构建自己的 Linux 系统》学习笔记(2)

    Linux 系统定制原理 虚拟根目录 我们的目标是为了完成目标系统(也就是我们要做的系统),他是一个可以独立运行的系统,不依赖雨主系统和临时系统,根据 Linux 系统的特点它需要存放在根目录下面,但 ...

  8. 就不能换DB吗? 抽象工厂模式

    15.1 就不能换DB吗? 15.2 最基本的数据访问程序 namespace 抽象工厂模式 { class Program { static void Main(string[] args) { U ...

  9. 安装Gitlab到Ubuntu(APT)

    运行环境 系统版本:Ubuntu 16.04.6 LTS 软件版本:Gitlab-ce-11.10.1 硬件要求:最低2核4GB,建议4核8GB 安装过程 1.安装依赖 root@localhost: ...

  10. get请求与post请求中文乱码问题的解决办法

    首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解 ...