Wallet路径须由Oracle用户完全控制:权限必须为700、所有者为oracle,不可放$ORACLE_HOME;ASM需ASMSNMP权限;建auto_login wallet前须关闭standard wallet并删除旧文件;启动自动打开需sqlnet.ora配置正确且WALLET_ROOT一致;丢失cwallet.sso将导致加密数据永久无法解密。
Wallet 文件路径必须由 Oracle 用户完全控制
oracle tde 要求 wallet_root 目录及其子目录只能被数据库操作系统用户(如 oracle)读写,且不能被组或其他用户访问。权限不对会导致 ora-28365: wallet is not open 或启动时报 ora-46633: cannot create auto login wallet。
-
chmod 700 /u01/app/oracle/admin/ORCL/wallet—— 必须设为 700,750 都不行 - 目录所有者必须是
oracle,不能是root或其他用户;chown oracle:oinstall /u01/app/oracle/admin/ORCL/wallet - 不要把 wallet 放在
$ORACLE_HOME下,容易被误升级覆盖;推荐放在$ORACLE_BASE/admin/$ORACLE_SID/wallet - 如果用 ASM 存储 wallet,需确认
ASMSNMP用户有对应 diskgroup 访问权限,否则ALTER SYSTEM SET ENCRYPTION WALLET OPEN会卡住
创建 auto_login wallet 时必须先关闭 standard wallet
Oracle 不允许 standard(密码保护)和 auto_login(cwallet.sso)两种 wallet 同时处于 active 状态。直接运行 mkstore -wrl <path> -createLocalWallet 会静默失败,日志里只报 ORA-46631: wallet already exists,但其实它只是拒绝覆盖已打开的 standard wallet。
- 先执行
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE,确保无 open 状态 - 删掉旧文件:
rm $WALLET_PATH/cwallet.sso $WALLET_PATH/ewallet.p12(注意别删错) - 用
mkstore -wrl <path> -createLocalWallet -auto_login创建 auto_login wallet;不加-auto_login默认建的是 standard 类型 - 验证是否成功:
ls -l $WALLET_PATH/cwallet.sso存在且非空,且sqlplus / as sysdba中执行SELECT * FROM V$ENCRYPTION_WALLET;显示OPEN状态
数据库启动后 wallet 不自动打开?检查 sqlnet.ora 和初始化参数
TDE wallet 在实例启动后不会自动 open,除非配置了 ENCRYPTION_WALLET_LOCATION 且 wallet 是 auto_login 类型。常见现象是:库能启起来,但一查加密表就报 ORA-28365: wallet is not open。
-
sqlnet.ora中必须有:ENCRYPTION_WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/admin/ORCL/wallet)));路径必须与WALLET_ROOT一致 -
WALLET_ROOT是 12.2+ 引入的初始化参数,若未设或设错,V$ENCRYPTION_WALLET可能显示NOT_AVAILABLE - 确认
sqlnet.ora被正确加载:用strace -e trace=open sqlplus / as sysdba -c "exit"看是否 open 了该文件 - auto_login wallet 对 Oracle Restart / GI 不自动生效,需配合
srvctl modify database -d ORCL -w /path/to/wallet注册
备份 wallet 文件比备份密钥更重要
丢失 cwallet.sso 意味着所有 TDE 加密数据彻底无法解密——Oracle 不提供密钥恢复机制。而 wallet 文件本身极小(通常
- 每次执行
ALTER SYSTEM KEY IDENTIFIED BY ...或ADMINISTER KEY MANAGEMENT SET KEY后,必须立即备份新生成的cwallet.sso - 不要只备份到本地磁盘;建议用
scp推送到独立备份服务器,或存入安全的版本控制系统(脱敏后) - 测试备份有效性:在测试库中替换 wallet 文件,重启并执行
SELECT COUNT(*) FROM encrypted_table确认可读 - 注意:
ewallet.p12是 standard wallet 的主文件,cwallet.sso是它的 auto_login 衍生品;两者内容不同,不可互相替代
事情说清了就结束。wallet 的权限、类型切换时机、配置加载路径、备份动作,四点里漏掉任何一项,TDE 就可能变成“透明地不可用”。










