Skip to content

Oracle 数据加密

数据加密的基本概念

数据加密的定义

  • 数据加密:使用加密算法将明文数据转换为密文数据的过程
  • 加密算法:用于执行加密和解密的数学函数
  • 密钥:控制加密和解密过程的参数
  • 明文:未加密的原始数据
  • 密文:加密后的数据

数据加密的重要性

  • 数据保护:保护敏感数据不被未授权访问
  • 合规性满足:满足行业法规和合规要求
  • 数据泄露防护:即使数据被窃取,也无法读取
  • 业务连续性:确保数据安全,保障业务连续性
  • 客户信任:增强客户对数据安全的信任

数据加密的类型

1. 透明数据加密 (TDE)

功能特点

  • 透明性:对应用和用户透明,无需修改应用代码
  • 存储加密:加密存储在磁盘上的数据
  • 实时加密:数据写入时自动加密,读取时自动解密
  • 范围灵活:支持表空间级和列级加密

适用场景

  • 敏感数据存储:存储敏感数据如个人信息、财务数据
  • 合规性要求:满足 PCI DSS、HIPAA 等合规要求
  • 数据文件保护:防止数据文件被窃取导致的数据泄露
  • 备份加密:加密备份数据

2. 网络加密

功能特点

  • 传输加密:加密网络传输中的数据
  • 协议支持:支持 SSL/TLS 协议
  • 认证功能:验证通信双方的身份
  • 完整性保护:确保数据传输过程中不被篡改

适用场景

  • 远程连接:加密远程数据库连接
  • 跨网络传输:加密跨网络的数据传输
  • 不安全网络:在不安全的网络环境中传输数据
  • 敏感数据传输:传输敏感数据时的保护

3. 应用级加密

功能特点

  • 应用控制:由应用程序控制加密过程
  • 灵活性高:可根据业务需求定制加密策略
  • 密钥管理:应用程序管理加密密钥
  • 细粒度控制:可对特定数据元素进行加密

适用场景

  • 特定业务需求:满足特定业务的加密要求
  • 复杂加密逻辑:需要复杂的加密逻辑
  • 应用级密钥管理:需要应用程序管理密钥
  • 非标准加密算法:需要使用非标准加密算法

4. 数据库 vault

功能特点

  • 特权访问控制:控制数据库管理员的访问
  • 敏感数据保护:保护敏感数据不被管理员访问
  • 分离职责:实现职责分离
  • 审计增强:增强对敏感数据访问的审计

适用场景

  • 管理员访问控制:防止管理员滥用权限
  • 高安全要求:对安全要求极高的环境
  • 合规性要求:满足严格的合规要求
  • 敏感数据保护:保护核心敏感数据

透明数据加密 (TDE) 的实施

表空间级加密

实施步骤

  1. 创建加密表空间

    sql
    -- 创建加密表空间
    CREATE TABLESPACE encrypted_ts
    DATAFILE 'D:\ORACLE\ORADATA\ORCL\ENCRYPTED_TS01.DBF'
    SIZE 100M
    ENCRYPTION USING 'AES256'
    DEFAULT STORAGE (ENCRYPT);
  2. 将表移至加密表空间

    sql
    -- 将现有表移至加密表空间
    ALTER TABLE sensitive_table MOVE TABLESPACE encrypted_ts;
    
    -- 重建索引
    ALTER INDEX sensitive_table_pk REBUILD TABLESPACE encrypted_ts;
  3. 验证加密状态

    sql
    -- 检查表空间加密状态
    SELECT tablespace_name, encrypted
    FROM dba_tablespaces
    WHERE tablespace_name = 'ENCRYPTED_TS';

列级加密

实施步骤

  1. 创建加密列

    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'
    );
  2. 修改现有列为加密列

    sql
    -- 修改现有列为加密列
    ALTER TABLE customer 
    MODIFY (credit_card_number ENCRYPT USING 'AES256');
  3. 验证加密状态

    sql
    -- 检查列加密状态
    SELECT column_name, encryption_algorithm
    FROM dba_tab_cols
    WHERE table_name = 'CUSTOMER' AND encrypted = 'YES';

网络加密的实施

SQL*Net 加密

实施步骤

  1. 配置服务器端 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)
  2. 配置客户端 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)
  3. 验证加密状态

    sql
    -- 查看会话加密状态
    SELECT network_service_banner
    FROM v$session_connect_info
    WHERE sid = SYS_CONTEXT('USERENV', 'SID');

SSL/TLS 配置

实施步骤

  1. 创建密钥库和证书

    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
  2. 配置监听器

    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
  3. 配置服务名

    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 对应用透明,无需修改应用代码
  • 测试验证:在测试环境中验证应用兼容性
  • 分阶段实施:分阶段实施加密,减少风险
  • 性能监控:监控加密对应用性能的影响
  • 应急回滚:准备加密实施失败的回滚方案