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;
相关推荐
码云数智-园园2 小时前
Oracle 锁等待、会话阻塞故障复盘:生产事故排查步骤
数据库·oracle
oradh19 小时前
Oracle enq: TX - index contention 锁等待事件问题排查总结
数据库·oracle·oracle enq tx·enq tx index
LRL_2 天前
7x24小时不停机:基于 Apache SeaTunnel 实现 Oracle to Oracle 实时 CDC 同步全实战
数据库·oracle·apache
G.E.M.小白2 天前
【SQLite3 数据库】从安装、SQL 操作到 C/C++ API 实战
数据库·oracle·sqlite3
神明不懂浪漫2 天前
【第一章】MySQL简介
数据库·经验分享·笔记·mysql·oracle
词却3 天前
数据库基础:DQL 数据查询语言
数据库·oracle
昌原的儿子LEO3 天前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
坐吃山猪3 天前
【多线程】Semaphore使用
java·数据库·oracle·多线程
姜太小白3 天前
【Oracle】记排查sh脚本调用SQL执行卡顿的排查总结
数据库·sql·oracle