理解 Oracle 多租户体系中(12c,18c,19c)Grant授权作用域范围
本篇探讨以下几个问题:你可提前猜测下面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授权作用域范围的更多相关文章
- 理解 Oracle 多租户体系中(12c,18c,19c)Revoke 回收权限作用域范围
本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个回收可以成功执行? 1. 在CDB级别中对用户进行权限回收,不带 container 子句的效果: 2. 在CDB级别中对用户进行权限回收, ...
- 理解 Oracle 多租户体系中(12c,18c,19c)创建角色作用域范围
本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建角色? 1. 在CDB级别中创建公共角色,不带 container 子句的效果: 2. 在CDB级别中创建公共角色,带 cont ...
- 理解 Oracle 多租户体系中(12c,18c,19c)创建用户作用域范围
本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建用户? 1. 在CDB级别中创建公共用户,不带 container 子句的效果: 2. 在CDB级别中创建公共用户,带 cont ...
- 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 用户 ...
- OCP培训 Oracle 12c/18c/19c OCP认证实战培训【送OCP优惠名额】
一.OCP培训 Oracle 12c/18c/19c OCP认证全套实战培训[送OCP优惠名额],本课程内容 课程目标: 为满足想参加Oracle OCP考证的学员,风哥设计的一套比较全面OCP实战培 ...
- 在ASP.NET中基于Owin OAuth使用Client Credentials Grant授权发放Token
OAuth真是一个复杂的东东,即使你把OAuth规范倒背如流,在具体实现时也会无从下手.因此,Microsoft.Owin.Security.OAuth应运而生(它的实现代码在Katana项目中),帮 ...
- 在WebApi中基于Owin OAuth使用授权发放Token
如何基于Microsoft.Owin.Security.OAuth,使用Client Credentials Grant授权方式给客户端发放access token? Client Credentia ...
- 深入理解Oracle RAC 12c 笔记
深入理解Oracle RAC 12c 跳转至: 导航. 搜索 文件夹 1 概述 2 集群件管理和故障诊断 3 执行实践 4 新特性 5 存储和ASM 6 应用设计上的问题 7 管理和调优一个复杂的RA ...
- 理解oracle中连接和会话
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp44 理解oracle中连接和会话 1. 概念不同:概念不同: 连接是指物 ...
随机推荐
- update mysql row (You can't specify target table 'x' for update in FROM clause)
sql语句(update/delete都会出现此问题) update x set available_material_id = null where id not in (select id fro ...
- AB实验人群定向HTE模型5 - Meta Learner
Meta Learner和之前介绍的Casual Tree直接估计模型不同,属于间接估计模型的一种.它并不直接对treatment effect进行建模,而是通过对response effect(ta ...
- 解决在jsp页面中使用jstl无法遍历request域中list集合的问题
解决在jsp页面中使用jstl无法遍历request域中list集合的问题 1. 前言 最近在写一个很简单的Javaweb项目,里面需要将request域中的list集合加载到jsp页面,我使用e ...
- Oracle实例占用超高CPU排查
CPU主要功能:处理指令.执行操作.要求进行动作.控制时间.处理数据. 结合数据库实例CPU占用高,可能的原因是数据库在执行大量的操作(全表查询.大量排序等). 由于公司没有DBA,遇到数据库问题只能 ...
- RMAN中MAXSETSIZE和MAXPIECESIZE的用法
MAXSETSIZE跟MAXPIECESIZE用法 区别:maxpiecesize设置的是备份完成后的备份片大小,对备份整体的大小没有影响,比如一个G的备份完成文件,maxpiecesize设置为10 ...
- 折腾vue--环境搭建(一)
1.安装nodejs nodejs下载地址:https://nodejs.org/en/ 2.检测nodejs //检测nodejs版本 node -v //检测npm npm –v 3.安装vue ...
- 洛谷P1331-搜索基础-什么是矩形?(我的方案)
原题链接:https://www.luogu.com.cn/problem/P1331 简单来说就是给出一个由‘#’和‘.‘组成的矩阵.需要识别存在几个矩形(被完全填充的).如果有矩形相互衔接则认为出 ...
- MongoDB 添加用户名和密码
MongoDB 添加用户名和密码 我用的是 mongodb3.6,如果没有的话先安装. sudo apt install mongodb 终端输入mongo,首先添加管理用户, show dbs // ...
- MySQL概述及入门(三)
MySql概述及入门(三) MySQL性能优化 主要优化安全和性能方面 安全方面 : 数据可持续性 性能方面 : 数据的高性能访问 性能优化——慢查询 在MySQL数据库中有一个慢查询日志功能,去获取 ...
- Lucene使用IKAnalyzer分词
1.分析器 所有分析器最终继承的类都是Analyzer 1.1 默认标准分析器:StandardAnalyzer 在我们创建索引的时候,我们使用到了Index ...