必须在cdb$root中执行pdb操作,否则报ora-65040;需验证cdb=y且con_name=cdb$root;启用local undo并为各pdb独立配置undo与临时表空间;业务表空间不得使用system/sysaux;用户须绑定专属表空间并回收unlimited tablespace权限;严禁跨pdb直连与对象引用。
确认当前容器是否为cdb$root
所有pdb相关操作必须在cdb$root中执行,否则会报错ora-65040: operation not allowed from within a pluggable database。连接后第一件事就是验证位置:
-
SELECT NAME, CDB FROM V$DATABASE;—— 必须返回CDB=YES -
SHOW CON_NAME;—— 必须显示CDB$ROOT -
SHOW PDBS;—— 至少应看到PDB$SEED和已存在的PDB
如果CON_NAME是某个PDB名,需先执行ALTER SESSION SET CONTAINER = CDB$ROOT;切回根容器。
为每个PDB单独创建专用UNDO与临时表空间
Oracle 19c默认启用Local UNDO(从12.2起可选,19c强烈建议开启),这是实现PDB级资源隔离的关键前提。共享UNDO会导致事务回滚段争用、跨PDB性能干扰,甚至因一个PDB的长事务拖垮整个CDB。
- 检查是否已启用Local UNDO:
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';,返回TRUE才安全 - 若为
FALSE,必须停库执行ALTER DATABASE LOCAL UNDO ON;并重启——该操作不可逆,且要求所有PDB已关闭 - 每个PDB的UNDO表空间名可相同(如
UNDOTBS1),但数据文件物理路径、大小、自动扩展策略必须独立配置,避免I/O混杂 - 临时表空间也需在PDB内单独创建:
CREATE TEMPORARY TABLESPACE temp_tenant_a TEMPFILE '/u01/oradata/cdb1/hrpdb/temp02.dbf' SIZE 100M AUTOEXTEND ON;
PDB内建业务表空间时禁用SYSTEM与SYSAUX作为默认表空间
很多DBA习惯在PDB里直接用SYSTEM或SYSAUX存业务数据,这会破坏租户边界、放大攻击面,且违反Oracle最佳实践。CDB$ROOT的SYSTEM/SYSAUX属于全局元数据区,不应承载租户业务负载。
- 建表空间时明确指定路径、区块大小、段空间管理方式:
CREATE TABLESPACE users_tenant_a DATAFILE '/u01/oradata/cdb1/hrpdb/users01.dbf' SIZE 500M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; - 创建用户时强制绑定专属表空间:
CREATE USER app_user IDENTIFIED BY pwd DEFAULT TABLESPACE users_tenant_a TEMPORARY TABLESPACE temp_tenant_a; - 立即回收默认赋予的
UNLIMITED TABLESPACE系统权限:REVOKE UNLIMITED TABLESPACE FROM app_user;,改用QUOTA精确控制
禁止跨PDB的DBA账号直连与对象引用
即使权限收得再紧,只要DBA用SYS@CDB$ROOT身份在PDB里执行SELECT * FROM hr.employees;,就等于绕过全部租户隔离。真正的隔离不是靠“不写错SQL”,而是让错写也没法执行。
- 绝不允许应用账号拥有
CONNECT TO ANY PLUGGABLE DATABASE或SET CONTAINER权限 - 禁用
CREATE SYNONYM或CREATE PUBLIC SYNONYM,防止通过同义词跨PDB访问对象 - 对高敏PDB启用TDE加密其表空间:
ALTER TABLESPACE users_tenant_a ENCRYPTION USING 'AES256' ENCRYPT;,密钥由OKV统一托管 - 审计关键行为:
AUDIT SELECT TABLE BY hr_user WHENEVER NOT SUCCESSFUL;,尤其关注OBJ_NAME字段是否含其他PDB对象名
最易被忽略的是:PDB级别的DBA角色(如PDB_DBA)仍能访问本PDB内所有对象,但无法跨PDB——这个边界必须靠容器切换机制本身守住,而不是靠人肉约束。











