Oracle12c多租户管理用户、角色、权限
Oracle 数据库 12 c 多租户选项允许单个容器数据库 (CDB) 来承载多个单独的可插拔数据库 (PDB)。
那么我们如何在容器数据库 (CDB) 和可插拔数据库 (PDB)管理用户权限。
背景:
当连接到多租户的数据库中,用户权限的管理相对传统的 Oracle 单数据库环境稍有不同。在多租户环境中有两种类型的用户。
共同用户(Common User): 该用户存在所有容器 (根和所有的 Pdb) 中。
本地用户(Local User): 用户只有在特定的 PDB 中存在。同样的用户名中可以存在多个Pdb中创建,但它们之间没有关系。
同样,有两种类型的角色。
共同角色(Common Role): 该角色在所有容器 (根和所有的 Pdb) 中。
本地角色(Local Role): 该角色只存在于特定的 PDB。可以在多个 Pdb中创建相同的角色名称,但它们之间没有关系。
一些 DDL 语句有扩充,以使他们能够定向到当前容器还是所有容器的CONTAINER子句。它的使用将在以下各节中进行演示。
一、创建和共同用户
条件:
1.必须连接到具有CREATE USER特权的共同用户。
2.在当前的数据库必须是根容器数据库。
3.常见的用户的用户名必须与"C##"或"c##"作为前缀,并包含唯一的 ASCII 或 EBCDIC 字符。
4.在所有容器该共同用户名必须是唯一的。
5.DEFAULT TABLESPACE、TEMPORARY TABLESPACE、QUOTA和PROFILE必须存在于所有容器中的所有引用对象。
您可以指定CONTAINER=ALL子句,或者忽略它,因为这是默认设置时,当前的容器是根。
6.公共用户可以在不同的CDB、PDB数据库中有不同的权限。
操作:
在 cdb 中创建公共用户的时候, pdbs 中也会创建相同用户。若CDB 下 GRANT 命令赋权,如果赋权时未指定container=all,则赋权只在CDB中生效,并不会在PDB中生效,这个用户要能够访问PDB,需要切换到 pdb 再赋权。。若赋权时指定 container=all,则赋权在CDB中生效,也在PDB中生效。
赋权时未指定container=all:
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> create user c##andy02 identified by andy;
SQL> grant create session to c##andy02;
C:\Users\andy>sqlplus c##andy02/andy@10.100.25.16:1521/andycdb
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
C:\Users\andy>sqlplus c##andy02/andy@10.100.25.16:1521/pdb01
ERROR:
ORA-01045: user C##ANDY02 lacks CREATE SESSION privilege; logon denied
SQL> alter session set container=pdb01;
SQL> grant create session to c##andy02;
C:\Users\andy>sqlplus c##andy02/andy@10.100.25.16:1521/pdb01
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
赋权时指定container=all:
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> create user c##andy identified by andy;
SQL> grant create session to c##andy container=all;
C:\Users\andy>sqlplus c##andy/andy@10.100.25.16:1521/andycdb
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
C:\Users\andy>sqlplus c##andy/andy@10.100.25.16:1521/pdb01
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
二、创建本地用户
条件:
1.必须连接到具有CREATE USER特权的用户。
2.本地用户的用户名不必须与"C##"或"c##"作为前缀。
3.用户名必须是在 PDB 内是唯一的。
4.当前的容器是 PDB 的时候,您可以指定CONTAINER=CURRENT子句,或者忽略它,因为这是默认设置。
操作:
SQL> show con_name
CON_NAME
------------------------------
PDB01
SQL> create user andy identified by andy;
SQL> grant create session to andy;
C:\Users\andy>sqlplus andy/andy@10.100.25.16:1521/pdb01
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
-- 去 CDB 中查看 本地用户 ANDY 存在否,果真不存在。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> select username,created from dba_users where username='ANDY';
no rows selected
三、创建共同角色
类似于前面所述的用户,角色可以是共同的或本地的 。
Oracle 提供的所有角色在根容器中和所有的 Pdb可见。创建共同角色需要满足以下条件。
条件
1.必须连接到共同用户CREATE ROLE与通常授予的SET CONTAINER权限。
2.当前的容器必须是根容器。
3.常见角色的角色名称必须与"C##"或"c##"为前缀,并且包含唯一 ASCII 或 EBCDIC 字符。
4.在所有容器的角色名称必须是唯一的。
5.角色创建与CONTAINER=ALL子句
6.公共角色可以赋予公共用户或者本地用户
操作:
注意:在 CDB 赋予角色权限的时候,需要指定 container=all ,否则 PDB 中不可见。
SQL> show con_name
CON_NAME
-------------------
CDB$ROOT
SQL> create role c##role_andy;
公共角色赋权 To a common user:
SQL> grant select on dba_objects to c##role_andy container=all;
SQL> grant c##role_andy to c##andy container=all;
C:\Users\andy>sqlplus c##andy/andy@10.100.25.16:1521/andycdb
SQL>
set lin 300;
set pagesize 300;
col username for a30;
col granted_role for a30;
select * from USER_ROLE_PRIVS;
USERNAME GRANTED_ROLE ADM DEL DEF OS_ COM INH
------------------------------ ------------------------------ --- --- --- --- --- ---
C##ANDY C##ROLE_ANDY NO NO YES NO YES NO
SQL> select count(*) from dba_objects;
COUNT(*)
----------
72635
C:\Users\andy>sqlplus c##andy/andy@10.100.25.16:1521/pdb01
set lin 300;
set pagesize 300;
col username for a30;
col granted_role for a30;
select * from USER_ROLE_PRIVS;
USERNAME GRANTED_ROLE ADM DEL DEF OS_ COM INH
------------------------------ ------------------------------ --- --- --- --- --- ---
C##ANDY C##ROLE_ANDY NO NO YES NO YES YES
SQL> select count(*) from dba_objects;
COUNT(*)
----------
72629
公共角色赋权 To a local user:
SQL> alter session set container=pdb01;
SQL> grant c##role_andy to andy;
C:\Users\andy>sqlplus andy/andy@10.100.25.16:1521/pdb01
SQL> select count(*) from dba_objects;
COUNT(*)
----------
72629
四、创建本地角色
本地角色是以类似的方式到 pre-12 c 数据库创建的。每个 PDB 可以具有与匹配的名称,因为当地的作用范围仅限于当前 PDB 的角色。
必须满足以下条件。
条件:
1.必须连接到具有CREATE ROLE权限的用户。
2.如果您连接到公共用户,容器必须设置为本地 PDB。
3.角色名称为本地角色不必须与"C##"或"c##"作为前缀。
4.角色名称必须是唯一在 PDB 内。
5.本地角色可以赋权给公共用户(作用范围局限于pdb内操作,不影响CDB权限)或者本地用户。
操作:
SQL> alter session set container=pdb01;
create role pdb_role;
grant select on dba_tables to pdb_role;
本地角色赋权 To a common user:
grant pdb_role to c##andy;
C:\Users\andy>sqlplus c##andy/andy@10.100.25.16:1521/pdb01
SQL> select count(*) from dba_tables;
COUNT(*)
----------
2106
C:\Users\andy>sqlplus c##andy/andy@10.100.25.16:1521/andycdb
SQL> select count(*) from dba_tables;
select count(*) from dba_tables
*
ERROR at line 1:
ORA-00942: table or view does not exist
本地角色赋权 To a local user:
grant pdb_role to andy;
C:\Users\andy>sqlplus andy/andy@10.100.25.16:1521/pdb01
SQL> select count(*) from dba_tables;
COUNT(*)
----------
2106
Oracle12c多租户管理用户、角色、权限的更多相关文章
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理
这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10
今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求 ...
- [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity
项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- spring-boot-plus V1.4.0发布 集成用户角色权限部门管理
RBAC用户角色权限 用户角色权限部门管理核心接口介绍 Shiro权限配置
- java权限管理与用户角色权限设计
java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器 ...
- [转]扩展RBAC用户角色权限设计方案
原文地址:http://www.iteye.com/topic/930648 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地 ...
- 扩展RBAC用户角色权限设计方案
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- RBAC用户角色权限设计方案
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用 户-角色 ...
随机推荐
- Maven——快速入门手册(学习记录)
前言: 前段时间进行了一点maven的入门学习,在这里做个记录,希望能帮到一些正在学习的朋友们.maven版本为3.3.9.希望大家觉得好的点个赞,觉得不好的多提提意见和建议做个交流.这里也贴出我学习 ...
- db2 sequence 查询
1. 查询名字 select * from sysibm.sysequences where seqname='wx_Id' 2.nextVal select wx_seq_id.currval fr ...
- Android时光轴
时间轴,顾名思义就是将一些事件或者事物等按照时间顺序罗列起来,给用户带来一种更加直观的体验.京东和淘宝等的物流顺序就是一个时间轴 前言:Android中使用RecyclerView实现时光轴,代码简 ...
- 单发邮箱 群发邮箱 程序 Email winform
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)
本节内容 前言 XML处理模块 ConfigParser/configparser模块 总结 一.前言 我们在<中我们描述了Python数据持久化的大体概念和基本处理方式,通过这些知识点我们已经 ...
- iOS 10 语音识别Speech Framework详解
最近做了一个项目,涉及到语音识别,使用的是iOS的speech Framework框架,在网上搜了很多资料,也看了很多博客,但介绍的不是很详细,正好项目做完,在这里给大家详解一下speech Fram ...
- Jquery EasyUI远程校验,Jquery EasyUI多个自定义校验,EasyUI自定义校验
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- STM32GPIO口8种模式细致分析(类比51单片机)
关于STM32GPIO口的8种工作模式,我们先引出一些问题? STM32GPIO口如果既要输入又要输出怎么办? 1.浮空输入模式 上图红色的表示便是浮空输入的过程,外部输入时0读出的就是0,外部输入时 ...
- cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)
cloud-init 是 linux 的一个工具,当系统启动时,cloud-init 可从 nova metadata 服务或者 config drive 中获取 metadata,完成包括但不限于下 ...
- 【Electron】Electron开发入门(二):创建项目Hello Word
创建简单的Electron程序 1.首先,切换到你的项目空间,我的在 D:\ProjectsSpace\ElectronProjects\ElectronTest,ElectronTest是案例项目文 ...