根据 Oracle 官方文档关于多租户架构下 TDE(透明数据加密)的配置规范,不依赖传统 sqlnet.ora 文件的 联合模式(United Mode)配置 TDE 详细步骤说明 。
在联合模式下,加密密钥库(Keystore/Wallet)统一存放在 CDB 根容器中并由其管理,所有联合模式下的 PDB 共享此密钥库,但每个 PDB 在其中拥有自己独立的标准主加密密钥(Master Encryption Key)。
📥 核心配置架构说明
在现代 Oracle 版本(如 19c 及以上)中,官方推荐使用内置初始化参数 WALLET_ROOT 与 TDE_CONFIGURATION 代替传统的 sqlnet.ora 路径配置。
WALLET_ROOT:定义数据库所有钱包资产(TDE、TLS 等)的根目录。TDE_CONFIGURATION:动态参数,指定密钥库的类型(如FILE文件钱包型,或OKV硬件集中型)。
🚀 联合模式(United Mode)TDE 配置详细步骤
第一步:在 CDB 级别配置密钥库位置与类型
-
在操作系统中创建钱包根目录
建议将此目录创建在$ORACLE_HOME或$ORACLE_BASE之外,避免在进行 OS 级别备份时将敏感的钱包文件与数据库文件备份到一起。mkdir -p /etc/ORACLE/KEYSTORES/orcl -
以具有 SYSKM 或 ADMINISTER KEY MANAGEMENT 权限的用户登录 CDB 根容器
sqlplus / as syskeyman -- 或使用具有相应权限的公共用户 -
配置静态根目录参数(需要重启数据库生效)
ALTER SYSTEM SET WALLET_ROOT='/etc/ORACLE/KEYSTORES/orcl' SCOPE=SPFILE; -
重启 CDB 数据库
SHUTDOWN IMMEDIATE; STARTUP; -
配置动态参数以启用文件密钥库(FILE)
ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" SCOPE=BOTH;💡 Oracle 的底层机制 :设置此参数后,Oracle 会自动在
WALLET_ROOT下隐式寻找或自动创建名为/tde的子目录,最终的钱包路径将自动归纳为/etc/ORACLE/KEYSTORES/orcl/tde/。
第二步:在 CDBRoot 中创建并初始化主密钥库
-
创建密码保护的密钥库(密码钱包)
此步骤会在物理路径下生成核心的ewallet.p12钱包文件。ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY "CdbWalletPass123"; -
手动打开该密钥库
在设置主密钥前,必须确保密钥库处于打开状态。ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "CdbWalletPass123"; -
为 CDB 根容器创建并激活主加密密钥
必须带上WITH BACKUP子句对钱包进行初始化备份。ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "CdbWalletPass123" WITH BACKUP USING 'cdb_initial_key_bak'; -
(强烈推荐)创建自动登录钱包(Auto-Login Wallet)
为了避免每次数据库或实例重启后都需要人工手动输入密码打开钱包,需生成对应的cwallet.sso自动登录文件。切记不要删除ewallet.p12基础物理钱包 。ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY "CdbWalletPass123";
说明:
- key是存放在keystore里面的
2.创建AUTO_LOGIN后,wallet就会一直打开,所以不用加force keystore临时打开wallet
第三步:在联合模式 PDB 中设置独立的主加密密钥
在联合模式下,虽然 PDB 共享 CDBroot 的钱包文件,但每个 PDB 必须在共享钱包中创建并激活属于该 PDB 专用的主加密密钥 ,才能正常使用 TDE 功能。
-
确保目标 PDB 处于 READ WRITE 读写状态
ALTER PLUGGABLE DATABASE mypdb OPEN; -
切换会话连接至目标 PDB
ALTER SESSION SET CONTAINER = mypdb; -
在 PDB 本地打开共享密钥库
使用第一步中设立的 CDB 级别钱包密码进行本地打开。ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "CdbWalletPass123"; -
为当前 PDB 设置专用的主加密密钥
这一步会在 CDBroot 维护的共享钱包中为当前 PDB 写入专有的 Master Key 数据。ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "CdbWalletPass123" WITH BACKUP USING 'mypdb_initial_key_bak';
第四步:数据加密实施
此时 TDE 环境在多租户联合模式下已全面就绪,可在 PDB 内正常执行数据加密操作。
-
创建新的加密表空间:
CREATE TABLESPACE secured_ts DATAFILE '/u01/app/oracle/oradata/orcl/mypdb/secured_ts01.dbf' SIZE 100M ENCRYPTION USING 'AES256' ENCRYPT; -
在线加密现有表空间:
ALTER TABLESPACE users ENCRYPTION ONLINE ENCRYPT;
📊 状态验证指令
通过执行以下官方数据字典及视图查询,可时刻校验 TDE 运行健康度:
-
检查整体密钥库模式与状态:
-- 预期:CON_ID 1 的 KEYSTORE_MODE 为 NONE,而其他 PDB 的 CON_ID 对应的模式应为 UNITED SELECT CON_ID, KEYSTORE_MODE, STATUS, WALLET_TYPE FROM V$ENCRYPTION_WALLET; -
验证主密钥激活状态:
-- 在具体 PDB 容器内执行,预期输出应为 YES SELECT MASTERKEY_ACTIVATED FROM V$DATABASE_KEY_INFO;