Oracle TDE

根据 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 级别配置密钥库位置与类型

  1. 在操作系统中创建钱包根目录
    建议将此目录创建在 $ORACLE_HOME 或 $ORACLE_BASE 之外,避免在进行 OS 级别备份时将敏感的钱包文件与数据库文件备份到一起。

    复制代码
    mkdir -p /etc/ORACLE/KEYSTORES/orcl
  2. 以具有 SYSKM 或 ADMINISTER KEY MANAGEMENT 权限的用户登录 CDB 根容器

    复制代码
    sqlplus / as syskeyman -- 或使用具有相应权限的公共用户
  3. 配置静态根目录参数(需要重启数据库生效)

    复制代码
    ALTER SYSTEM SET WALLET_ROOT='/etc/ORACLE/KEYSTORES/orcl' SCOPE=SPFILE;
  4. 重启 CDB 数据库

    复制代码
    SHUTDOWN IMMEDIATE;
    STARTUP;
  5. 配置动态参数以启用文件密钥库(FILE)

    复制代码
    ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" SCOPE=BOTH;

    💡 Oracle 的底层机制 :设置此参数后,Oracle 会自动在 WALLET_ROOT 下隐式寻找或自动创建名为 /tde 的子目录,最终的钱包路径将自动归纳为 /etc/ORACLE/KEYSTORES/orcl/tde/ 。


第二步:在 CDBRoot 中创建并初始化主密钥库

  1. 创建密码保护的密钥库(密码钱包)
    此步骤会在物理路径下生成核心的 ewallet.p12 钱包文件。

    复制代码
    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY "CdbWalletPass123";
  2. 手动打开该密钥库
    在设置主密钥前,必须确保密钥库处于打开状态。

    复制代码
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "CdbWalletPass123";
  3. 为 CDB 根容器创建并激活主加密密钥
    必须带上 WITH BACKUP 子句对钱包进行初始化备份。

    复制代码
    ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "CdbWalletPass123" WITH BACKUP USING 'cdb_initial_key_bak';
  4. (强烈推荐)创建自动登录钱包(Auto-Login Wallet)
    为了避免每次数据库或实例重启后都需要人工手动输入密码打开钱包,需生成对应的 cwallet.sso 自动登录文件。切记不要删除 ewallet.p12 基础物理钱包 。

    复制代码
    ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY "CdbWalletPass123";

说明:

  1. key是存放在keystore里面的

2.创建AUTO_LOGIN后,wallet就会一直打开,所以不用加force keystore临时打开wallet


第三步:在联合模式 PDB 中设置独立的主加密密钥

在联合模式下,虽然 PDB 共享 CDBroot 的钱包文件,但每个 PDB 必须在共享钱包中创建并激活属于该 PDB 专用的主加密密钥 ,才能正常使用 TDE 功能。

  1. 确保目标 PDB 处于 READ WRITE 读写状态

    复制代码
    ALTER PLUGGABLE DATABASE mypdb OPEN;
  2. 切换会话连接至目标 PDB

    复制代码
    ALTER SESSION SET CONTAINER = mypdb;
  3. 在 PDB 本地打开共享密钥库
    使用第一步中设立的 CDB 级别钱包密码进行本地打开。

    复制代码
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "CdbWalletPass123";
  4. 为当前 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;
相关推荐
Lethehong6 小时前
Oracle 加个字段,目标库就报错?KFS 用“先拆后组“打通异构 DDL
数据库·oracle
Web极客码6 小时前
锁定真正的磁盘卡顿:我用 OpenCode 配合 eBPF 诊断 NVMe 队列深度延迟与 I/O 写放大
数据库·oracle
猫咪很可爱8 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
张洛闻Eren13 小时前
Ansible【第三课】:管理变量和事实
数据库·oracle
我科绝伦(Huanhuan Zhou)15 小时前
Oracle 表空间碎片整理实战:shrink space 与 move table 全解析
数据库·oracle
远方160917 小时前
108-ORA-00600 [kdsgrp1-qetlbr] 内部错误排查与 RMAN 块级恢复
大数据·linux·数据库·oracle
福娃筱欢18 小时前
SQLServer迁移至KES SQLServer模式 问题整理
数据库·oracle·sqlserver
啵啵啵鱼20 小时前
六、联合查询
数据库·oracle
缓慢更新1 天前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式