3.2 创建密钥库目录
su - oracle
mkdir -p /opt/oracle/admin/orcl/wallet
3.3 创建密码保护的密钥库
-- oracle-19c
-- 创建密码保护的软件密钥库,identified by 后为密钥库密码
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/opt/oracle/admin/orcl/wallet' IDENTIFIED BY [密码];
创建完成后,目录下生成 ewallet.p12 文件,此时密钥库为关闭状态。
-- 验证密钥库状态
COL wrl_parameter FOR a40
SELECT * FROM v$encryption_wallet;
3.4 配置自动登录
配置自动登录后,目录下会生成 cwallet.sso 文件,数据库启动时自动打开密钥库。
-- oracle-19c
-- 创建自动登录密钥库
ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/opt/oracle/admin/orcl/wallet' IDENTIFIED BY [密码];
注意: 配置自动登录后 WALLET_TYPE 为 AUTOLOGIN,此时无法直接关闭密钥库。若需关闭,请参考 3.7 关闭密钥库。
3.5 设置 TDE 主加密密钥
-- oracle-19c
-- 在软件密钥库中设置 TDE 主加密密钥,force 关键字用于已有密钥时强制覆盖
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY [密码] WITH BACKUP;
CDB-PDB 架构下的操作:
-- 若为 PDB 模式,需进入对应 PDB 单独设置主加密密钥
ALTER SESSION SET CONTAINER = pdb_name;
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY [密码] WITH BACKUP;
-- 若需对所有 PDB 设置(在 CDB 根容器执行)
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY [密码] WITH BACKUP CONTAINER = ALL;
3.6 创建加密表空间与测试数据
创建加密表空间:
-- 指定加密算法与存储参数的写法
-- CREATE TABLESPACE tde1
-- DATAFILE '/opt/oracle/oradata/ORCL/tde01.dbf'
-- SIZE 1024M AUTOEXTEND ON NEXT 100M MAXSIZE 30G
-- ENCRYPTION USING 'AES256'
-- DEFAULT STORAGE (ENCRYPT);
-- 验证表空间加密状态
SELECT tablespace_name, encrypted FROM dba_tablespaces;
创建测试表并插入数据:
CREATE TABLE t1 (id NUMBER) TABLESPACE tde1;
INSERT INTO t1 VALUES (101);
COMMIT;
SELECT * FROM t1;
3.7 关闭密钥库
若已配置自动登录,需先移除自动登录文件,否则会报错。
错误示例(自动登录状态下直接关闭):
ORA-28390: auto login keystore not open
正确关闭流程:
# 移除自动登录文件
mv /opt/oracle/admin/orcl/wallet/cwallet.sso /opt/oracle/admin/orcl/wallet/cwallet.sso.bak
-- oracle-19c
-- 关闭密钥库
ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY [密码];
小贴士: 移除 cwallet.sso 后,数据库重启需手动打开密钥库,请确保已记录密钥库密码。
3.8 开启密钥库
-- oracle-19c
-- 方式一
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY [密码];
-- 方式二(推荐)
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY [密码];
-- CDB-PDB 架构下强制打开所有容器密钥库
-- ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN FORCE KEYSTORE IDENTIFIED BY [密码] CONTAINER = ALL;
-- 验证密钥库状态
SELECT * FROM v$encryption_wallet;
3.9 重新配置自动登录
-- oracle-19c
-- 重新创建自动登录密钥库,需重启数据库生效
ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/opt/oracle/admin/orcl/wallet' IDENTIFIED BY [密码];
# 重启数据库
sqlplus / as sysdba
SHUTDOWN IMMEDIATE
STARTUP
-- 验证自动登录是否生效(WALLET_TYPE 应为 AUTOLOGIN)
SELECT * FROM v$encryption_wallet;
4 方式二:修改 WALLET_ROOT 参数(Oracle 推荐方式)
推荐: 此方式为 Oracle 官方推荐,需重启数据库。
4.1 创建密钥库目录
su - oracle
mkdir -p /opt/oracle/admin/orcl/wallet
4.2 设置 WALLET_ROOT 静态参数
-- oracle-19c
-- 设置 WALLET_ROOT 参数(静态参数,需重启)
ALTER SYSTEM SET WALLET_ROOT = '/opt/oracle/admin/orcl/wallet' SCOPE = SPFILE;
# 重启数据库
sqlplus / as sysdba
SHUTDOWN IMMEDIATE
STARTUP
-- 验证参数是否生效
SELECT name, value FROM v$parameter WHERE name = 'wallet_root';
4.3 设置 TDE_CONFIGURATION 参数
-- oracle-19c
-- 指定密钥库类型为 FILE(软件密钥库)
ALTER SYSTEM SET TDE_CONFIGURATION = 'KEYSTORE_CONFIGURATION=FILE' SCOPE = BOTH;
-- 验证参数
SELECT name, value FROM v$parameter WHERE name = 'tde_configuration';
4.4 创建密码保护的密钥库
-- oracle-19c
-- 使用 WALLET_ROOT 方式时,无需指定路径,自动使用 $WALLET_ROOT/tde/ 目录
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY [密码];
创建完成后,在 $WALLET_ROOT/tde/ 目录下生成 ewallet.p12 文件,此时密钥库为关闭状态。
-- 验证密钥库状态
COL wrl_parameter FOR a50
SELECT * FROM v$encryption_wallet;
4.5 配置自动登录
-- oracle-19c
ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY [密码];
4.6 设置 TDE 主加密密钥
-- oracle-19c
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY [密码] WITH BACKUP;
-- 验证主加密密钥
SELECT key_id, activation_time FROM v$encryption_keys;
5 在线加密与解密
5.1 在线加密已有表空间
-- oracle-19c
-- 在线加密 USERS 表空间,使用 AES192 算法
ALTER TABLESPACE users ENCRYPTION ONLINE USING 'AES192' ENCRYPT;
5.2 在线解密表空间
-- oracle-19c
-- 在线解密 USERS 表空间
ALTER TABLESPACE users ENCRYPTION ONLINE DECRYPT;
注意: 在线加密/解密操作期间,表空间仍可正常读写,但会消耗额外的 CPU 和 I/O 资源。建议在业务低峰期执行。
6 密钥库管理常用命令速查
操作 命令
查看密钥库状态 SELECT * FROM v$encryption_wallet;
查看加密密钥信息 SELECT key_id, activation_time FROM v$encryption_keys;
查看加密表空间 SELECT tablespace_name, encrypted FROM dba_tablespaces;
打开密钥库 ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY [密码];
关闭密钥库 ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY [密码];
备份密钥库 ADMINISTER KEY MANAGEMENT BACKUP KEYSTORE IDENTIFIED BY [密码];
修改密钥库密码 ADMINISTER KEY MANAGEMENT ALTER KEYSTORE IDENTIFIED BY [旧密码] SET [新密码];
合并密钥库 ADMINISTER KEY MANAGEMENT MERGE KEYSTORE ... IDENTIFIED BY ... INTO ...;
7 TDE 加密算法说明
算法 密钥长度 说明
AES128 128 位 默认加密算法,性能与安全性平衡
AES192 192 位 中等安全级别
AES256 256 位 最高安全级别,性能开销略大
3DES168 168 位 已不推荐,仅用于向后兼容
建议: 新建加密表空间推荐使用 AES256,兼顾安全与 Oracle 官方建议。