Debian 上 Oracle 数据加密技术落地指南
一 架构与场景
- 在 Debian 上,Oracle 的数据加密通常覆盖三层:
- 传输层加密(客户端/服务器通信,TLS/SSL);
- 静态数据加密(TDE:列级与表空间级);
- 备份与灾备链路加密(RMAN 备份集、Data Guard 传输)。
- 传输层建议在 listener.ora / sqlnet.ora 启用 SSL/TLS 或强制加密;静态数据采用 TDE 的两层密钥体系(主密钥在外部安全模块,表/表空间密钥在数据字典/数据文件头);备份与 Data Guard 分别通过 RMAN 加密与 REDO_TRANSPORT_ENCRYPT 保障链路安全。
二 传输层加密 TLS SSL 配置
- 服务器端配置(示例为单向 TLS,客户端证书可选):
- 在 $ORACLE_HOME/network/admin/sqlnet.ora 启用加密与协议:
SQLNET.ENCRYPTION_SERVER = required
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
SQLNET.CRYPTO_CHECKSUM_SERVER = required
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA1)
SSL_VERSION = 1.2
- 在 $ORACLE_HOME/network/admin/listener.ora 的监听地址中使用 TCPS 并指向服务器证书/钱包:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = your_host)(PORT = 1521))
)
)
SSL_CLIENT_AUTHENTICATION = FALSE # 如需双向 TLS 改为 TRUE
- 使用 orapki 或 openssl 生成服务器证书,证书与钱包(ewallet.p12/pem)按 Oracle 文档放置并配置权限。
- 重启监听:lsnrctl stop / lsnrctl start。
- 客户端连接:
- 在 tnsnames.ora 使用 TCPS 协议与端口,或在连接字符串中指定 (PROTOCOL=TCPS)。
- 如使用双向 TLS,客户端需导入信任的 CA/服务器证书。
- 主机防火墙仅放行 1521/tcp(UFW 示例):sudo ufw allow 1521/tcp && sudo ufw enable。
- 说明:旧版本亦可通过 SQLNET.ENCRYPTION_CLIENT / ENCRYPTION_TYPES_CLIENT 强制加密,但推荐使用 TCPS/SSL 获得更强的握手与算法协商能力。
三 静态数据加密 TDE 实施
- 前置准备:
- 指定钱包目录(sqlnet.ora):
ENCRYPTION_WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = /u01/app/oracle/admin//wallet)))
- 创建并打开钱包:
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE ‘/u01/app/oracle/admin//wallet’ IDENTIFIED BY “WltPass”;
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY “WltPass”;
- 生成主加密密钥(MEK):
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY “WltPass” WITH BACKUP;
- 加密方式:
- 表空间级(推荐,便于大范围落地):
CREATE TABLESPACE sec_ts DATAFILE ‘/u01/…/sec01.dbf’ SIZE 500M
ENCRYPTION USING ‘AES256’ DEFAULT STORAGE(ENCRYPT);
将表/索引迁移至该表空间即可完成加密(12.2+ 支持在线加密转换)。
- 列级(精细到列):
ALTER TABLE emp ADD (ssn VARCHAR2(11) ENCRYPT USING ‘AES256’);
- 验证与运维:
- 查询 DBA_ENCRYPTED_TABLESPACES / USER_ENCRYPTED_COLUMNS 确认加密状态;
- 定期备份钱包(含 auto-login 钱包),并执行密钥轮换(REKEY)与恢复演练;
- 注意:TDE 不加密 BFILE 等外部大对象;SYSTEM/SYSAUX/UNDO/TEMP 在 12.2 之前不可加密,之后可加密但需谨慎评估停机与性能。
- 性能提示:官方与业界实践显示,TDE 带来的典型 CPU 开销约为 5%–8%,建议结合业务峰值与 SQL 访问特征进行压测与容量规划。
四 备份与灾备链路加密
- RMAN 备份集加密(介质加密,防止离线窃取):
- 配置加密钱包并打开;
- 配置 RMAN:
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM TO ‘AES256’;
- 备份:BACKUP DATABASE FORMAT ‘/backup/orcl_%U.bak’;
- Data Guard 传输加密(防止网络嗅探):
- 在备库参数设置:REDO_TRANSPORT_ENCRYPT = ON;
- 可结合 SSL/TLS 证书或集成 TDE 钱包完成密钥协商。
- 说明:TDE 会对写入重做日志的敏感数据进行同步加密,而 REDO_TRANSPORT_ENCRYPT 仅加密主备之间的传输流,两者作用域不同、可叠加使用。
五 合规与运维要点
- 密钥与钱包:主密钥必须离线妥善备份(含 auto-login 钱包),并进行周期性 REKEY;丢失钱包将导致已加密数据不可恢复。
- 算法与版本:常用算法为 AES128/AES192/AES256;11g/19c 默认列加密为 AES192、表空间为 AES128,建议统一到 AES256 以满足更高合规要求。
- 范围与限制:TDE 不覆盖 BFILE 等外部对象;列级加密对索引类型有约束(如仅支持 B-Tree),大表/全库建议优先表空间级。
- 审计与监控:开启数据库审计(如 AUDIT_TRAIL=DB/XML),结合 alert_.log 与监听日志进行异常检测;对监听与数据库端口实施 UFW/iptables 白名单与 Fail2ban 联动。
- 性能与变更:上线前进行全链路压测(含备份/恢复、Data Guard 切换);加密表空间在线转换(12.2+)需评估维护窗口与依赖对象(索引/物化视图/LOB)重建影响。