本篇探讨以下几个问题:你可提前猜测下面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级别创建的用户或角色称为本地用户或角色。且CDB级别无法对公共用户和角色无法进行 container=current 操作,PDB级别无法对本地用户进行 container=all 操作。

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 user c##admin identified by admin;

User created.

# 需要注意:CDB级别中这个语句和带 container=all 语句效果一样

该语句创建的用户,将作用于CDB和所有PDB。详情参考《理解 Oracle 多租户体系中(12c,18c,19c)创建用户作用域范围》一文

SQL> select username,common,con_id from cdb_users where username='C##ADMIN';

USERNAME    COMMON       CON_ID
--------------- ------ ----------
C##ADMIN YES 1
C##ADMIN YES 3

对该用户进行授权,不带 container 子句

SQL> grant create session to c##admin;

Grant succeeded.

# 授权成功后,请问 c##admin 用户能否登陆CDB?能否登陆PDB?

验证该用户是否可以登录CDB和PDB

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

结论:公共用户在进行授权不带 container 子句,默认仅作用于CDB级别

2. CDB 授权带 container=all

CDB创建测试用户

SQL> conn / as sysdba
Connected.
SQL> create user c##admin1 identified by admin1; User created.

该语句创建的用户,将作用于CDB和所有PDB。

SQL> select username,common,con_id from cdb_users where username='C##ADMIN1';

USERNAME    COMMON       CON_ID
--------------- ------ ----------
C##ADMIN1 YES 1
C##ADMIN1 YES 3

对该用户进行授权,带 container=all 子句

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

Grant succeeded.

验证该用户是否可以登录CDB和PDB

SQL> conn c##admin1/admin1@cdb18c
Connected. # CDB可以进行登录 SQL> conn c##admin1/admin1@orders
Connected. # PDB可以进行登录

结论:公共用户在进行授权带 container=all 子句,默认作用于CDB和所有PDB

3. CDB 授权带 container=current

CDB创建测试用户

SQL> conn / as sysdba
Connected.
SQL> create user c##admin2 identified by admin2; User created.

该语句创建的用户,将作用于CDB和所有PDB。

SQL> select username,common,con_id from cdb_users where username='C##ADMIN2';

USERNAME    COMMON       CON_ID
--------------- ------ ----------
C##ADMIN2 YES 1
C##ADMIN2 YES 3

对该用户进行授权,带 container=current 子句

SQL> grant create session to c##admin2 container=current;

Grant succeeded.

验证该用户是否可以登录CDB和PDB

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

结论:公共用户在进行授权带 container=current 子句,默认仅作用于CDB级别,和不带container子句效果一致。

4. PDB 授权不带 container 默认

PDB创建测试用户

SQL> conn sys/oracle@orders as sysdba
Connected.
SQL> show pdbs CON_ID CON_NAME    OPEN MODE RESTRICTED
---------- ------------------- ---------- ----------
3    ORDERS READ WRITE NO
SQL> create user padmin identified by padmin; User created.

该语句创建的用户,将作用于当前PDB。

SQL> select username,common,con_id from cdb_users where username='PADMIN';

USERNAME    COMMON       CON_ID
--------------- ------ ----------
PADMIN NO 3

对该用户进行授权,不带 container 子句

SQL> grant create session to padmin;

Grant succeeded.

验证该用户是否可以登录当前PDB

SQL> conn padmin/padmin@orders
Connected. # PDB可以进行登录

结论:本地用户在进行授权不带 container 子句,默认仅作用于当前PDB级别

5. PDB 授权带 container=all

PDB创建测试用户

SQL> create user padmin1 identified by padmin1;

User created.

该语句创建的用户,将作用于当前PDB。

SQL> select username,common,con_id from cdb_users where username='PADMIN1';

USERNAME   COMMON     CON_ID
---------- ------ ----------
PADMIN1 NO 3

对该用户进行授权,带 container=all 子句

SQL> grant create session to padmin1 container=all;
grant create session to padmin1 container=all
*
ERROR at line 1:
ORA-65030: cannot grant a privilege commonly to a local user or role # 报错,无法进行本地用户的 container=all 授权

结论:本地用户在进行权限授权时,无法使用 container=all 子句。

6. PDB 授权带 container=current

针对上面PDB用户 padmin1 能否使用 container=current 子句进行授权?

SQL> grant create session to padmin1 container=current;

Grant succeeded.

SQL> conn padmin1/padmin1@orders
Connected.

结论:本地用户在进行权限授权时,使用 container=current 子句,作用域为当前PDB

综上:

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

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

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

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

  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. 在ASP.NET中基于Owin OAuth使用Client Credentials Grant授权发放Token

    OAuth真是一个复杂的东东,即使你把OAuth规范倒背如流,在具体实现时也会无从下手.因此,Microsoft.Owin.Security.OAuth应运而生(它的实现代码在Katana项目中),帮 ...

  7. 在WebApi中基于Owin OAuth使用授权发放Token

    如何基于Microsoft.Owin.Security.OAuth,使用Client Credentials Grant授权方式给客户端发放access token? Client Credentia ...

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

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

  9. 理解oracle中连接和会话

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

随机推荐

  1. 如何在IDEA的maven项目中连接并使用MySQL8.0

    首先看一下我的基本的开发环境: 操作系统:MacOS 10.13.5 编辑器:IDEA 2018.3 其他:MySQL8.0.15.Maven 3.3.9.JDK 1.8 好,下面就正式开始: 第一步 ...

  2. View Binding初探

    参考翻译:https://developer.android.google.cn/topic/libraries/view-binding View Binding是一项功能,使您可以更轻松地编写与视 ...

  3. ungetc--C语言中处理字符串常碰到的问题

    如图,在学习C++速成课的时候发现了这个神奇的函数ungetc(),视频的UP主给的注释是将变量(字符串)中存放的字符退回给stdin输入流.这是什么意思 看UP主的函数 在上面getchar()是用 ...

  4. GPU体系架构(二):GPU存储体系

    GPU是一个外围设备,本来是专门作为图形渲染使用的,但是随着其功能的越来越强大,GPU也逐渐成为继CPU之后的又一计算核心.但不同于CPU的架构设计,GPU的架构从一开始就更倾向于图形渲染和大规模数据 ...

  5. 特殊符号unicode编码

    包括箭头类.基本形状类.货币类.数学类.音乐符号类.对错类.星星类.星座类.国际象棋类.扑克牌类.希腊字母.十字类.法律符号.标点符号,详情见以下网址:http://caibaojian.com/un ...

  6. Pycharm每次新建工程都要重新安装相关库的解决办法

    之前自己每次重建工程时,都不厌其烦的重新安装了第三方的库,直接在pycharm的terminal中利用pip安装,或者鼠标放在所需库的红色波浪线上 直接点击Install Package XXX 后面 ...

  7. open xml 导出excel遇到的问题

    我有一个需求:使用ajax 下载excel文件 结果:失败 原因:下载文件是通过浏览器解析二级制流下载的,而ajax返回的是文本 方法: 1.如果你下载不需要参数,那直接写个a标签链接到地址就行 2. ...

  8. C# WPF联系人列表(1/3)

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF联系人列表(1/3) 阅读导航 本文背景 代码实现 本文参考 1.本文背景 聊天软 ...

  9. .Net 程序代码混淆加密工具 ILProtector

    我的项目中某一部分信息比较敏感,但是.Net程序反编译之后连注释都看得到.需要把exe保护起来,如:代码混淆之后再加壳. Bing到一款.Net混淆工具  ILProtector   作为资深工具党, ...

  10. Spring AOP-基于@AspectJ风格

    关于Spring AOP,可以去看看官方文档: https://docs.spring.io/spring-framework/docs/current/spring-framework-refere ...