Skip to content

OceanBase 静态数据加密

加密算法与密钥管理

支持的加密算法

OceanBase 数据库支持多种加密算法,可根据安全需求选择:

算法类型支持的算法密钥长度应用场景
对称加密AES-128128位表空间加密
对称加密AES-192192位表空间加密
对称加密AES-256256位表空间加密
哈希算法SHA-256-数据完整性校验
哈希算法SHA-512-数据完整性校验

密钥管理架构

OceanBase 采用分层密钥管理架构:

  1. 主密钥(Master Key):用于加密表空间密钥,存储在外部密钥管理系统(KMS)或本地密钥文件中
  2. 表空间密钥(Tablespace Key):用于加密表空间数据,存储在表空间元数据中,使用主密钥加密
  3. 列加密密钥(Column Key):用于列级加密,存储在系统表中,使用主密钥加密

外部密钥管理系统集成

OceanBase 支持与多种外部 KMS 集成:

  • AWS KMS
  • Azure Key Vault
  • Alibaba Cloud KMS
  • HashiCorp Vault
  • 自定义 KMS 接口

静态数据加密配置

1. 配置主密钥

使用本地密钥文件

sql
-- 创建本地密钥文件
ALTER SYSTEM SET encryption_master_key_file = '/path/to/master_key_file';

-- 生成主密钥
ALTER SYSTEM GENERATE ENCRYPTION MASTER KEY;

使用外部 KMS

sql
-- 配置 KMS 类型
ALTER SYSTEM SET encryption_kms_type = 'alibaba_cloud_kms';

-- 配置 KMS 端点
ALTER SYSTEM SET encryption_kms_endpoint = 'kms.aliyuncs.com';

-- 配置 KMS 密钥 ID
ALTER SYSTEM SET encryption_kms_key_id = 'your_kms_key_id';

-- 配置 KMS 访问密钥
ALTER SYSTEM SET encryption_kms_access_key = 'your_access_key';
ALTER SYSTEM SET encryption_kms_secret_key = 'your_secret_key';

2. 创建加密表空间

创建表空间时启用加密

sql
CREATE TABLESPACE encrypted_tbs 
DATAFILE 'encrypted_tbs_01.dbf' SIZE 10G 
ENCRYPTION USING 'AES-256';

修改现有表空间为加密

sql
-- 首先备份表空间
ALTER TABLESPACE existing_tbs BACKUP;

-- 修改表空间为加密
ALTER TABLESPACE existing_tbs ENCRYPTION USING 'AES-256';

3. 创建加密表

在加密表空间中创建表

sql
CREATE TABLE encrypted_table (
    id INT PRIMARY KEY,
    data VARCHAR(100)
) TABLESPACE encrypted_tbs;

使用列级加密

sql
CREATE TABLE column_encrypted_table (
    id INT PRIMARY KEY,
    sensitive_data VARCHAR(100) ENCRYPTED WITH 'AES-256' USING COLUMN ENCRYPTION KEY default_cek
);

4. 配置日志文件加密

sql
-- 配置重做日志加密
ALTER SYSTEM SET redo_log_encryption = 'ON';

-- 配置归档日志加密
ALTER SYSTEM SET archive_log_encryption = 'ON';

加密数据管理

1. 查看加密状态

查看表空间加密状态

sql
SELECT tablespace_name, encryption FROM dba_tablespaces;

查看表加密状态

sql
SELECT table_name, tablespace_name FROM dba_tables WHERE tablespace_name IN (
    SELECT tablespace_name FROM dba_tablespaces WHERE encryption = 'YES'
);

2. 密钥轮换

主密钥轮换

sql
-- 生成新的主密钥
ALTER SYSTEM GENERATE NEW ENCRYPTION MASTER KEY;

-- 重新加密所有表空间密钥
ALTER SYSTEM REENCRYPT ALL TABLESPACES WITH NEW MASTER KEY;

表空间密钥轮换

sql
-- 轮换特定表空间的密钥
ALTER TABLESPACE encrypted_tbs REENCRYPT USING 'AES-256';

-- 轮换所有表空间的密钥
ALTER SYSTEM REENCRYPT ALL TABLESPACES USING 'AES-256';

3. 加密数据备份与恢复

备份加密表空间

sql
-- 备份加密表空间
ALTER TABLESPACE encrypted_tbs BACKUP TO '/path/to/backup';

-- 备份加密表
EXPDP username/password@oceanbase DIRECTORY=exp_dir DUMPFILE=encrypted_table.dmp TABLES=encrypted_table;

恢复加密数据

sql
-- 恢复加密表空间
ALTER TABLESPACE encrypted_tbs RESTORE FROM '/path/to/backup';

-- 恢复加密表
IMPDP username/password@oceanbase DIRECTORY=exp_dir DUMPFILE=encrypted_table.dmp TABLES=encrypted_table;

性能优化与最佳实践

1. 性能优化建议

  • 选择合适的加密算法:根据安全需求和性能要求选择合适的加密算法,AES-128 性能最优,AES-256 安全性最高
  • 使用硬件加速:启用 CPU 的 AES-NI 指令集,提高加密性能
  • 合理规划表空间:将敏感数据和非敏感数据分开存储,只对敏感数据进行加密
  • 优化存储配置:使用 SSD 存储,提高加密数据的读写性能

2. 最佳实践

  • 定期轮换密钥:建议每 3-6 个月轮换一次主密钥
  • 使用外部 KMS:生产环境建议使用外部 KMS 管理密钥,提高密钥安全性
  • 备份密钥材料:定期备份密钥材料,并存储在安全的离线位置
  • 限制密钥访问权限:严格控制密钥管理相关操作的权限
  • 监控加密状态:定期监控加密表空间和加密数据的状态

3. 安全建议

  • 不要将密钥与数据存储在同一位置:主密钥应存储在与数据不同的物理位置
  • 使用强密码保护密钥文件:如果使用本地密钥文件,应设置强密码保护
  • 定期审计密钥使用情况:监控和审计密钥的访问和使用情况
  • 遵循最小权限原则:只授予必要的密钥管理权限

常见问题处理

1. 主密钥丢失

症状

  • 无法访问加密表空间
  • 报错信息包含 "Master key not found" 或 "Failed to decrypt tablespace key"
  • 加密数据无法恢复

解决方案

  • 从备份中恢复主密钥
  • 如果使用外部 KMS,确保 KMS 服务正常运行
  • 联系 OceanBase 技术支持获取帮助

2. 加密性能下降

症状

  • 加密表的查询和写入性能下降
  • 系统 CPU 使用率增加
  • 响应时间变长

解决方案

  • 检查是否启用了硬件加速
  • 考虑调整加密算法为性能更好的算法
  • 优化存储配置,使用更高性能的存储设备
  • 考虑将非敏感数据迁移到非加密表空间

3. 密钥轮换失败

症状

  • ALTER SYSTEM REENCRYPT 语句执行失败
  • 报错信息包含 "Failed to reencrypt tablespace key" 或 "Lock wait timeout"
  • 密钥轮换过程中系统负载过高

解决方案

  • 检查系统资源使用情况,确保有足够的资源
  • 在业务低峰期进行密钥轮换
  • 延长锁等待超时时间
  • 分批进行密钥轮换,避免一次性处理所有表空间

常见问题(FAQ)

Q1: 静态数据加密会影响性能吗?

A1: 静态数据加密会带来一定的性能开销,主要影响:

  • 写入性能:约 5-15% 的下降
  • 查询性能:约 3-10% 的下降
  • CPU 使用率:会增加 5-20% 的 CPU 消耗

通过合理配置和优化,可以将性能影响降到最低。

Q2: 如何选择合适的加密算法?

A2: 选择加密算法的依据:

  • 安全需求:高安全性场景选择 AES-256,一般场景选择 AES-128
  • 性能要求:对性能要求高的场景选择 AES-128
  • 合规要求:某些合规标准可能要求使用特定长度的密钥

Q3: 加密表空间可以转换为非加密表空间吗?

A3: 是的,可以将加密表空间转换为非加密表空间:

sql
ALTER TABLESPACE encrypted_tbs DECRYPT;

但需要注意,转换过程会消耗大量系统资源,建议在业务低峰期进行。

Q4: 外部 KMS 不可用时,加密数据还能访问吗?

A4: OceanBase 会缓存主密钥在内存中,因此短期 KMS 不可用不会影响加密数据的访问。但如果集群重启或主密钥缓存失效,就需要 KMS 服务可用才能解密数据。

建议配置 KMS 高可用,或定期备份主密钥到本地。

Q5: 静态数据加密可以与其他安全功能一起使用吗?

A5: 是的,静态数据加密可以与其他安全功能协同工作:

  • 与传输加密结合,实现端到端的数据安全
  • 与访问控制结合,限制对加密数据的访问
  • 与审计功能结合,监控加密数据的访问情况
  • 与备份加密结合,确保备份数据的安全性

Q6: 如何备份主密钥?

A6: 备份主密钥的方法:

sql
-- 导出主密钥到文件
ALTER SYSTEM EXPORT ENCRYPTION MASTER KEY TO '/path/to/master_key_backup' IDENTIFIED BY 'password';

-- 从文件导入主密钥
ALTER SYSTEM IMPORT ENCRYPTION MASTER KEY FROM '/path/to/master_key_backup' IDENTIFIED BY 'password';

建议将主密钥备份存储在安全的离线位置,并定期测试恢复过程。