一、创建用户
创建用户默认的是container=all,在cdb中只能创建全局用户(c##开头),会在cdb和所有的pdb中创建该用户(但是pdb中的全局用户需要另外授权才能够在pdb中访问)。在pdb中只能创建的用户为本地用户
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL> create user user1 identified by user1;
create user user1 identified by user1
*
第 1 行出现错误:
ORA-65096: 公用用户名或角色名无效
SQL> create user c##user1 identified by user1;
用户已创建。
SQL> SELECT USERNAME,CON_ID,USER_ID FROM CDB_USERS WHERE USERNAME='C##USER1';
USERNAME CON_ID USER_ID
-------------------------C##USER1 1 102
C##USER1 3 103C##USER1 4 103
SQL> alter session set container=pdb1;
会话已更改。
SQL> create user c##user2 identified by user2;
create user c##user2 identified by user2
*
第 1 行出现错误:
ORA-65094: 本地用户名或角色名无效
SQL> create user user2 identified by user2;
用户已创建。
SQL> SELECT USERNAME,CON_ID,USER_ID FROM CDB_USERS WHERE USERNAME='USER2';
USERNAME CON_ID USER_ID
-------------------------
USER2 3 104
二、角色、用户授权
用户授权默认情况下是只会给当前container,在cdb中也可以指定container=all,对所有open的pdb且存在该用户都进行授权
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> grant connect to c##user1;
授权成功。
SQL> select GRANTEE,con_id from cdb_ROLE_PRIVS where GRANTED_ROLE='CONNECT' AND GRANTEE='C##USER1';
GRANTEE CON_ID
-------------------------------------------------------------------------------------------------------------------------------- ----------
C##USER1 1
SQL> grant resource to c##user1 container=all;
授权成功。
SQL> select GRANTEE,con_id from cdb_ROLE_PRIVS where GRANTED_ROLE='RESOURCE' AND GRANTEE='C##USER1';
GRANTEE CON_ID
-------------------------------------------------------------------------------------------------------------------------------- ----------
C##USER1 1
C##USER1 3
C##USER1 4
三、修改参数
这里可以看到在cdb中修改,pdb会继承进去;如果在pdb中修改会覆盖pdb从cdb中继承的参数含义、
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> alter system set open_cursors=500 container=all;
系统已更改。
SQL> show parameter open_cursors;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 500
SQL> alter session set container=PDB1;
会话已更改。
SQL> show parameter open_cursors;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 500
SQL> alter system set open_cursors=600;
系统已更改。
SQL> show parameter open_cursors;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 600
SQL> alter session set container=CDB$ROOT;
会话已更改。
SQL> show parameter open_cursors;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 500
参考
ORACLE-BASE - Multitenant : Overview of Container Databases (CDB) and Pluggable Databases (PDB)
【ORACLE】ORACLE 12c PDB 基础 - 临渊羡鱼 - 博客频道 - CSDN.NET
Oracle 12C 多租户(Oracle Multitenant)--基本概念-zerocool88888888-ChinaUnix博客
ORACLE 12C PDB 维护基础介绍 – 提供专业ORACLE技术咨询和支持@Phone:13429648788 - 惜分飞
Oracle 12c CDB PDB - 丁应思 - 博客园
Oracle 12c入门第三讲: Oracle 12c基本体系结构 (3) pdb,cdb元数据关系 ...,数据智能网,Oracle 12C
浅谈Oracle数据库12c PDB技术 - Oracle安装与升级 - TechTarget数据库