外观
Oracle 数据加密
数据加密的基本概念
数据加密的定义
- 数据加密:使用加密算法将明文数据转换为密文数据的过程
- 加密算法:用于执行加密和解密的数学函数
- 密钥:控制加密和解密过程的参数
- 明文:未加密的原始数据
- 密文:加密后的数据
数据加密的重要性
- 数据保护:保护敏感数据不被未授权访问
- 合规性满足:满足行业法规和合规要求
- 数据泄露防护:即使数据被窃取,也无法读取
- 业务连续性:确保数据安全,保障业务连续性
- 客户信任:增强客户对数据安全的信任
数据加密的类型
1. 透明数据加密 (TDE)
功能特点
- 透明性:对应用和用户透明,无需修改应用代码
- 存储加密:加密存储在磁盘上的数据
- 实时加密:数据写入时自动加密,读取时自动解密
- 范围灵活:支持表空间级和列级加密
适用场景
- 敏感数据存储:存储敏感数据如个人信息、财务数据
- 合规性要求:满足 PCI DSS、HIPAA 等合规要求
- 数据文件保护:防止数据文件被窃取导致的数据泄露
- 备份加密:加密备份数据
2. 网络加密
功能特点
- 传输加密:加密网络传输中的数据
- 协议支持:支持 SSL/TLS 协议
- 认证功能:验证通信双方的身份
- 完整性保护:确保数据传输过程中不被篡改
适用场景
- 远程连接:加密远程数据库连接
- 跨网络传输:加密跨网络的数据传输
- 不安全网络:在不安全的网络环境中传输数据
- 敏感数据传输:传输敏感数据时的保护
3. 应用级加密
功能特点
- 应用控制:由应用程序控制加密过程
- 灵活性高:可根据业务需求定制加密策略
- 密钥管理:应用程序管理加密密钥
- 细粒度控制:可对特定数据元素进行加密
适用场景
- 特定业务需求:满足特定业务的加密要求
- 复杂加密逻辑:需要复杂的加密逻辑
- 应用级密钥管理:需要应用程序管理密钥
- 非标准加密算法:需要使用非标准加密算法
4. 数据库 vault
功能特点
- 特权访问控制:控制数据库管理员的访问
- 敏感数据保护:保护敏感数据不被管理员访问
- 分离职责:实现职责分离
- 审计增强:增强对敏感数据访问的审计
适用场景
- 管理员访问控制:防止管理员滥用权限
- 高安全要求:对安全要求极高的环境
- 合规性要求:满足严格的合规要求
- 敏感数据保护:保护核心敏感数据
透明数据加密 (TDE) 的实施
表空间级加密
实施步骤
创建加密表空间
sql-- 创建加密表空间 CREATE TABLESPACE encrypted_ts DATAFILE 'D:\ORACLE\ORADATA\ORCL\ENCRYPTED_TS01.DBF' SIZE 100M ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);将表移至加密表空间
sql-- 将现有表移至加密表空间 ALTER TABLE sensitive_table MOVE TABLESPACE encrypted_ts; -- 重建索引 ALTER INDEX sensitive_table_pk REBUILD TABLESPACE encrypted_ts;验证加密状态
sql-- 检查表空间加密状态 SELECT tablespace_name, encrypted FROM dba_tablespaces WHERE tablespace_name = 'ENCRYPTED_TS';
列级加密
实施步骤
创建加密列
sql-- 创建带加密列的表 CREATE TABLE customer ( customer_id NUMBER PRIMARY KEY, customer_name VARCHAR2(100), credit_card_number VARCHAR2(16) ENCRYPT USING 'AES256', SSN VARCHAR2(9) ENCRYPT USING 'AES256' );修改现有列为加密列
sql-- 修改现有列为加密列 ALTER TABLE customer MODIFY (credit_card_number ENCRYPT USING 'AES256');验证加密状态
sql-- 检查列加密状态 SELECT column_name, encryption_algorithm FROM dba_tab_cols WHERE table_name = 'CUSTOMER' AND encrypted = 'YES';
网络加密的实施
SQL*Net 加密
实施步骤
配置服务器端 sqlnet.ora
txt-- 在服务器端 sqlnet.ora 中设置 SQLNET.ENCRYPTION_SERVER = REQUIRED SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128) SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)配置客户端 sqlnet.ora
txt-- 在客户端 sqlnet.ora 中设置 SQLNET.ENCRYPTION_CLIENT = REQUIRED SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256, AES192, AES128) SQLNET.CRYPTO_CHECKSUM_CLIENT = REQUIRED SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA256)验证加密状态
sql-- 查看会话加密状态 SELECT network_service_banner FROM v$session_connect_info WHERE sid = SYS_CONTEXT('USERENV', 'SID');
SSL/TLS 配置
实施步骤
创建密钥库和证书
bash-- 创建密钥库 orapki wallet create -wallet $ORACLE_HOME/network/admin/wallet -pwd WalletPasswd123 -auto_login -- 创建证书请求 orapki wallet add -wallet $ORACLE_HOME/network/admin/wallet -dn "CN=dbserver.example.com" -keysize 2048 -self_signed -validity 365配置监听器
txt-- 在 listener.ora 中设置 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = dbserver)(PORT = 2484)) ) ) WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = $ORACLE_HOME/network/admin/wallet) ) ) SSL_CLIENT_AUTHENTICATION = FALSE配置服务名
txt-- 在 tnsnames.ora 中设置 ORCL_SSL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = dbserver)(PORT = 2484)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) (SECURITY = (SSL_SERVER_CERT_DN = "CN=dbserver.example.com") ) )
密钥管理
密钥类型
- 主密钥:用于加密其他密钥的密钥
- 表空间密钥:用于加密表空间的密钥
- 列密钥:用于加密列的密钥
- 钱包密码:保护密钥库的密码
密钥库管理
创建密钥库
bash
-- 创建 Oracle 密钥库
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE 'D:\ORACLE\KEYSTORE' IDENTIFIED BY KeystorePasswd123;打开/关闭密钥库
sql
-- 打开密钥库
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY KeystorePasswd123;
-- 关闭密钥库
ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY KeystorePasswd123;备份密钥库
bash
-- 备份密钥库文件
COPY 'D:\ORACLE\KEYSTORE\*' 'D:\ORACLE\BACKUP\KEYSTORE\';密钥轮换
轮换主密钥
sql
-- 轮换主密钥
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY KeystorePasswd123 WITH BACKUP USING 'backup_key';轮换表空间密钥
sql
-- 轮换表空间密钥
ALTER TABLESPACE encrypted_ts REKEY USING 'AES256';密钥恢复
从备份恢复
bash
-- 从备份恢复密钥库
COPY 'D:\ORACLE\BACKUP\KEYSTORE\*' 'D:\ORACLE\KEYSTORE\';紧急访问
sql
-- 紧急访问加密数据
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY KeystorePasswd123;数据加密的性能影响
影响因素
- 加密算法:不同加密算法的性能开销不同
- 加密范围:加密范围越大,性能开销越大
- 硬件能力:CPU 性能和是否支持硬件加密加速
- 存储系统:存储系统的性能
- 应用负载:应用的 I/O 模式和负载特性
性能优化
算法选择
- 平衡安全与性能:选择合适的加密算法
- 硬件加速:使用支持硬件加速的加密算法
- AES 系列:推荐使用 AES 系列算法,性能和安全性平衡
配置优化
- 合理设置加密范围:只加密必要的数据
- 使用表空间级加密:表空间级加密比列级加密性能更好
- 优化存储系统:使用高性能存储系统
- 合理设置 SGA:确保有足够的 SGA 缓存
监控与调优
- 性能监控:监控加密对性能的影响
- SQL 优化:优化 SQL 语句,减少 I/O 操作
- 索引设计:合理设计索引,减少加密列的索引使用
- 批量操作:使用批量操作减少加密/解密次数
数据加密的最佳实践
实施最佳实践
- 规划先行:在实施前进行充分的规划
- 测试验证:在测试环境中验证加密性能和功能
- 分阶段实施:分阶段实施加密,减少风险
- 备份充分:在实施前进行完整备份
- 文档完善:详细记录加密实施过程和配置
密钥管理最佳实践
- 密钥分离:不同环境使用不同的密钥
- 定期轮换:定期轮换加密密钥
- 多重备份:密钥库多重备份,存储在安全位置
- 访问控制:严格控制密钥库的访问权限
- 审计跟踪:审计密钥相关操作
安全最佳实践
- 最小权限:只授予必要的加密相关权限
- 定期审计:定期审计加密配置和使用情况
- 合规性检查:定期检查加密是否满足合规要求
- 漏洞评估:定期评估加密系统的漏洞
- 安全更新:及时应用安全补丁
管理最佳实践
- 培训到位:对相关人员进行加密技术培训
- 流程规范:建立规范的加密管理流程
- 应急方案:制定加密系统故障的应急方案
- 定期检查:定期检查加密系统的状态
- 持续改进:持续改进加密策略和实施
版本差异
11g vs 12c
- TDE 增强:12c 增强了 TDE 功能,支持更灵活的密钥管理
- 统一审计:12c 中加密操作会被统一审计
- 多租户支持:12c 支持多租户环境中的加密
- 密钥库管理:12c 引入了更强大的密钥库管理功能
- 透明数据加密:12c 优化了 TDE 的性能
12c vs 19c
- 加密算法:19c 支持更多加密算法
- 性能优化:19c 进一步优化了加密性能
- 云集成:19c 优化了云环境下的加密功能
- 自动密钥管理:19c 提供了更多自动密钥管理功能
- 安全增强:19c 增强了加密相关的安全功能
常见问题(FAQ)
Q1: 透明数据加密 (TDE) 会影响数据库性能吗?
A1: TDE 对性能的影响:
- 影响程度:通常在 3-5% 左右,具体取决于硬件和负载
- 影响因素:加密算法、硬件性能、I/O 模式
- 优化方法:使用硬件加密加速、优化存储系统、合理设置加密范围
- 性能测试:在实施前进行性能测试,评估影响
Q2: 如何选择合适的加密算法?
A2: 选择加密算法的考虑因素:
- 安全性:算法的安全强度
- 性能:算法的性能开销
- 合规性:是否满足合规要求
- 硬件支持:是否支持硬件加速
- 推荐算法:AES 系列算法(AES128、AES192、AES256)
Q3: 密钥丢失怎么办?
A3: 处理密钥丢失的方法:
- 预防措施:定期备份密钥库,存储在安全位置
- 紧急恢复:使用备份的密钥库进行恢复
- 密钥管理:建立严格的密钥管理流程
- 灾备方案:制定密钥丢失的灾备方案
- 专业支持:必要时寻求 Oracle 专业支持
Q4: 如何验证数据是否已加密?
A4: 验证数据加密状态的方法:
- 表空间加密验证:sql
SELECT tablespace_name, encrypted FROM dba_tablespaces; - 列加密验证:sql
SELECT column_name, encrypted FROM dba_tab_cols WHERE table_name = '表名'; - 网络加密验证:sql
SELECT network_service_banner FROM v$session_connect_info; - 数据文件验证:使用工具检查数据文件内容
Q5: 加密备份和 TDE 有什么区别?
A5: 加密备份与 TDE 的区别:
- TDE:加密存储在磁盘上的数据,对应用透明
- 加密备份:只加密备份数据,不影响生产数据
- 使用场景:TDE 用于日常存储加密,加密备份用于备份数据保护
- 实施方式:TDE 需要配置密钥库,加密备份通常通过备份工具实现
- 性能影响:TDE 对生产性能有轻微影响,加密备份只影响备份过程
Q6: 如何处理加密对现有应用的影响?
A6: 处理加密对现有应用影响的方法:
- 透明性:TDE 对应用透明,无需修改应用代码
- 测试验证:在测试环境中验证应用兼容性
- 分阶段实施:分阶段实施加密,减少风险
- 性能监控:监控加密对应用性能的影响
- 应急回滚:准备加密实施失败的回滚方案
