外观
OceanBase 静态数据加密
加密算法与密钥管理
支持的加密算法
OceanBase 数据库支持多种加密算法,可根据安全需求选择:
| 算法类型 | 支持的算法 | 密钥长度 | 应用场景 |
|---|---|---|---|
| 对称加密 | AES-128 | 128位 | 表空间加密 |
| 对称加密 | AES-192 | 192位 | 表空间加密 |
| 对称加密 | AES-256 | 256位 | 表空间加密 |
| 哈希算法 | SHA-256 | - | 数据完整性校验 |
| 哈希算法 | SHA-512 | - | 数据完整性校验 |
密钥管理架构
OceanBase 采用分层密钥管理架构:
- 主密钥(Master Key):用于加密表空间密钥,存储在外部密钥管理系统(KMS)或本地密钥文件中
- 表空间密钥(Tablespace Key):用于加密表空间数据,存储在表空间元数据中,使用主密钥加密
- 列加密密钥(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';建议将主密钥备份存储在安全的离线位置,并定期测试恢复过程。
