外观
DM 数据加密
加密类型
1. 存储加密
定义:对数据库存储在磁盘上的数据进行加密,包括数据文件、日志文件、备份文件等。
特点:
- 透明加密,对应用程序透明,无需修改应用代码
- 加密强度高,支持多种加密算法
- 可以防止物理存储设备丢失导致的数据泄露
适用场景:
- 存储敏感数据的数据库
- 对数据安全要求高的场景
- 符合合规要求的场景,如 GDPR、PCI DSS 等
加密对象:
- 数据文件(.DBF)
- 日志文件(.LOG)
- 备份文件(.BAK)
- 归档日志文件(.ARC)
2. 传输加密
定义:对客户端与数据库之间传输的数据进行加密,防止网络监听和数据篡改。
特点:
- 支持 SSL/TLS 协议
- 可以防止中间人攻击
- 对应用程序影响小,只需修改连接配置
适用场景:
- 客户端与数据库之间通过公网连接
- 对数据传输安全要求高的场景
- 符合合规要求的场景
加密协议:
- SSL 3.0
- TLS 1.0/1.1/1.2/1.3
3. 应用加密
定义:在应用程序层面对数据进行加密,包括数据的加密存储和加密传输。
特点:
- 灵活性高,可以根据业务需求选择加密算法和策略
- 可以实现更细粒度的加密控制
- 需要修改应用程序代码
适用场景:
- 对特定字段或数据类型进行加密
- 需要实现端到端加密的场景
- 对加密有特殊要求的场景
加密方式:
- 字段级加密
- 行级加密
- 应用层加密库
存储加密配置
1. 加密算法
DM 数据库支持多种加密算法,包括:
| 算法类型 | 支持的算法 | 密钥长度 | 适用场景 |
|---|---|---|---|
| 对称加密 | AES128、AES192、AES256 | 128/192/256 位 | 数据文件加密、日志文件加密 |
| 非对称加密 | RSA1024、RSA2048、RSA4096 | 1024/2048/4096 位 | 密钥加密、数字签名 |
| 哈希算法 | SHA1、SHA256、SHA512 | - | 数据完整性验证、密码哈希 |
2. 加密配置步骤
操作说明:
- 配置数据库加密参数
- 初始化加密环境
- 创建加密表空间或加密表
配置文件修改:
- 修改 dm.ini 配置文件,启用加密功能:
ini
# 启用数据加密功能
ENABLE_ENCRYPT = 1
# 加密算法,可选值:AES128、AES192、AES256
ENCRYPT_NAME = AES256
# 加密密钥存储方式,可选值:FILE、HSM
ENCRYPT_KEY_STORE = FILE
# 密钥文件路径
ENCRYPT_KEY_FILE = /dm/data/DAMENG/encrypt.key- 初始化加密环境:
bash
# 使用 dmenskmgr 工具初始化加密环境
./dmenskmgr init -path /dm/data/DAMENG/encrypt.key -pwd Dameng123- 创建加密表空间:
sql
-- 创建加密表空间
CREATE TABLESPACE encrypt_ts DATAFILE 'encrypt_ts.dbf' SIZE 100M ENCRYPT WITH AES256;- 创建加密表:
sql
-- 在加密表空间上创建表
CREATE TABLE encrypt_table (
id INT PRIMARY KEY,
name VARCHAR(50),
sensitive_data VARCHAR(100)
) TABLESPACE encrypt_ts;
-- 在普通表空间上创建加密表
CREATE TABLE encrypt_table2 (
id INT PRIMARY KEY,
name VARCHAR(50),
sensitive_data VARCHAR(100) ENCRYPT WITH AES256
) TABLESPACE main;3. 加密密钥管理
操作说明:
- 生成和管理加密密钥
- 定期轮换加密密钥
- 备份和恢复加密密钥
密钥管理工具:
dmenskmgr 工具:
- 功能:达梦数据库加密密钥管理工具,用于生成、备份、恢复和轮换密钥
- 常用命令:bash
# 初始化密钥文件 ./dmenskmgr init -path /dm/data/DAMENG/encrypt.key -pwd Dameng123 # 备份密钥文件 ./dmenskmgr backup -path /dm/data/DAMENG/encrypt.key -bak_path /dm/backup/encrypt.key.bak -pwd Dameng123 # 恢复密钥文件 ./dmenskmgr restore -path /dm/data/DAMENG/encrypt.key -bak_path /dm/backup/encrypt.key.bak -pwd Dameng123 # 轮换密钥 ./dmenskmgr rotate -path /dm/data/DAMENG/encrypt.key -pwd Dameng123 # 查看密钥信息 ./dmenskmgr info -path /dm/data/DAMENG/encrypt.key -pwd Dameng123
密钥管理最佳实践:
- 使用强密码保护密钥文件
- 定期轮换密钥,建议每 6-12 个月轮换一次
- 备份密钥文件并存储在安全可靠的位置
- 限制密钥文件的访问权限,只有数据库管理员可以访问
- 考虑使用硬件安全模块(HSM)存储密钥,提高密钥安全性
传输加密配置
1. SSL/TLS 配置步骤
操作说明:
- 生成 SSL 证书和密钥
- 配置数据库 SSL 参数
- 配置客户端 SSL 连接
证书生成:
bash
# 使用 OpenSSL 生成 CA 证书
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
# 生成服务器证书请求
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
# 签署服务器证书
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
# 生成客户端证书请求
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
# 签署客户端证书
openssl x509 -req -days 3650 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt数据库配置:
- 修改 dm.ini 配置文件,启用 SSL 功能:
ini
# 启用 SSL 功能
ENABLE_SSL = 1
# SSL 协议版本,可选值:TLS1.0、TLS1.1、TLS1.2、TLS1.3
SSL_VERSION = TLS1.2
# 服务器证书文件路径
SSL_SERVER_CERT = /dm/data/DAMENG/server.crt
# 服务器私钥文件路径
SSL_SERVER_KEY = /dm/data/DAMENG/server.key
# CA 证书文件路径
SSL_CA_CERT = /dm/data/DAMENG/ca.crt- 修改 dm.ini 配置文件,配置 SSL 端口:
ini
# SSL 服务端口
SSL_PORT_NUM = 5237客户端配置:
- 在客户端配置文件中添加 SSL 配置:
ini
# 启用 SSL 连接
SSL_ENABLE = 1
# SSL 协议版本
SSL_VERSION = TLS1.2
# 客户端证书文件路径
SSL_CLIENT_CERT = /dm/client/client.crt
# 客户端私钥文件路径
SSL_CLIENT_KEY = /dm/client/client.key
# CA 证书文件路径
SSL_CA_CERT = /dm/client/ca.crt- 使用 SSL 连接数据库:
bash
# 使用 disql 工具通过 SSL 连接数据库
disql SYSDBA/SYSDBA@localhost:5237?ssl=true2. SSL 连接验证
操作说明:
- 验证 SSL 连接是否成功
- 检查 SSL 连接的加密强度
验证方法:
- 使用 disql 工具连接数据库,查看连接信息:
sql
-- 查看数据库连接信息
SELECT * FROM V$SESSION WHERE SID = SYS_CONTEXT('USERENV', 'SID');- 使用 OpenSSL 工具验证 SSL 连接:
bash
# 验证 SSL 连接
openssl s_client -connect localhost:5237 -CAfile /dm/client/ca.crt应用加密
1. 字段级加密
定义:对表中的特定字段进行加密,只有授权用户才能查看解密后的数据。
操作说明:
- 创建加密函数和解密函数
- 在表定义中指定加密字段
- 使用加密函数插入数据,使用解密函数查询数据
示例:
sql
-- 创建加密函数
CREATE OR REPLACE FUNCTION encrypt_data(p_data VARCHAR(100)) RETURN VARCHAR(200)
AS
v_result VARCHAR(200);
BEGIN
v_result := ENCRYPT(p_data, 'AES256', 'Dameng123');
RETURN v_result;
END;
/
-- 创建解密函数
CREATE OR REPLACE FUNCTION decrypt_data(p_data VARCHAR(200)) RETURN VARCHAR(100)
AS
v_result VARCHAR(100);
BEGIN
v_result := DECRYPT(p_data, 'AES256', 'Dameng123');
RETURN v_result;
END;
/
-- 创建包含加密字段的表
CREATE TABLE user_info (
id INT PRIMARY KEY,
name VARCHAR(50),
phone VARCHAR(200),
email VARCHAR(200)
);
-- 插入加密数据
INSERT INTO user_info VALUES (1, '张三', encrypt_data('13800138000'), encrypt_data('zhangsan@example.com'));
-- 查询解密数据
SELECT id, name, decrypt_data(phone) AS phone, decrypt_data(email) AS email FROM user_info;2. 透明数据加密(TDE)
定义:对表中的敏感字段进行透明加密,应用程序无需修改代码即可使用。
操作说明:
- 配置透明数据加密参数
- 创建透明加密表
示例:
sql
-- 创建透明加密表
CREATE TABLE tde_table (
id INT PRIMARY KEY,
name VARCHAR(50),
sensitive_data VARCHAR(100) ENCRYPT WITH AES256
);
-- 插入数据(自动加密)
INSERT INTO tde_table VALUES (1, '张三', '敏感数据');
-- 查询数据(自动解密)
SELECT * FROM tde_table;加密性能影响
1. 存储加密性能影响
影响因素:
- 加密算法的复杂度
- 加密数据量的大小
- 硬件配置(CPU、内存、存储)
性能优化建议:
- 选择合适的加密算法,平衡安全性和性能
- 使用高性能存储设备,如 SSD
- 增加 CPU 资源,提高加密和解密速度
- 只对敏感数据进行加密,避免不必要的性能开销
2. 传输加密性能影响
影响因素:
- SSL/TLS 协议版本
- 加密算法的复杂度
- 网络带宽和延迟
性能优化建议:
- 使用较新的 TLS 版本,如 TLS 1.3
- 选择合适的加密套件,平衡安全性和性能
- 优化网络配置,提高网络带宽和降低延迟
- 对频繁访问的数据考虑使用缓存,减少网络传输
加密数据的备份与恢复
1. 加密数据备份
操作说明:
- 备份加密数据库或加密表空间
- 备份加密密钥
- 记录加密配置参数
备份命令示例:
bash
# 备份加密数据库
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL TO 'encrypt_backup' BACKUPSET '/dm/backup/encrypt_backup'"
# 备份加密密钥
cp /dm/data/DAMENG/encrypt.key /dm/backup/encrypt.key.bak2. 加密数据恢复
操作说明:
- 恢复加密数据库或加密表空间
- 恢复加密密钥
- 配置加密参数
恢复命令示例:
bash
# 恢复加密密钥
cp /dm/backup/encrypt.key.bak /dm/data/DAMENG/encrypt.key
# 恢复加密数据库
./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/encrypt_backup'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/encrypt_backup'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"加密最佳实践
1. 选择合适的加密策略
- 根据业务需求和安全要求选择合适的加密类型
- 对敏感数据进行加密,避免不必要的性能开销
- 平衡安全性和性能,选择合适的加密算法
2. 加强密钥管理
- 使用强密码保护密钥文件
- 定期轮换加密密钥
- 备份密钥文件并存储在安全可靠的位置
- 考虑使用硬件安全模块(HSM)存储密钥
3. 定期审计和监控
- 审计加密相关的操作,如密钥生成、轮换、备份等
- 监控加密性能,及时调整加密策略
- 定期检查加密配置,确保符合安全要求
4. 符合合规要求
- 了解相关的合规要求,如 GDPR、PCI DSS 等
- 根据合规要求配置加密功能
- 定期进行合规审计,确保符合要求
5. 测试和验证
- 在测试环境中测试加密功能,验证加密效果和性能影响
- 定期进行加密数据的恢复测试,确保备份的可用性
- 测试加密功能对应用程序的影响,确保应用程序正常运行
加密的版本差异
| DM 版本 | 加密功能特点 |
|---|---|
| DM 7 | 支持基本的存储加密和传输加密功能 |
| DM 8 | 增强了加密功能,支持透明数据加密(TDE)和更丰富的加密算法 |
| DM 8.1 | 支持硬件安全模块(HSM)集成,增强了密钥管理功能 |
常见问题(FAQ)
Q1: 加密会影响数据库性能吗?
A1: 加密会对数据库性能产生一定的影响,具体影响程度取决于加密类型、加密算法、硬件配置等因素。一般来说,存储加密的性能影响在 5%-15% 之间,传输加密的性能影响在 3%-10% 之间。可以通过选择合适的加密算法、优化硬件配置等方式降低性能影响。
Q2: 如何备份和恢复加密密钥?
A2: 备份和恢复加密密钥的方法如下:
- 使用 dmenskmgr 工具备份和恢复密钥
- 定期将密钥文件复制到安全的备份位置
- 恢复时,将备份的密钥文件复制到原位置
Q3: 密钥丢失了怎么办?
A3: 密钥丢失会导致无法访问加密数据,因此必须妥善保管密钥。如果密钥丢失,可能需要重新创建数据库并恢复数据,但加密数据将无法恢复。因此,建议定期备份密钥,并将备份存储在安全可靠的位置。
Q4: 如何选择合适的加密算法?
A4: 选择合适的加密算法需要考虑安全性和性能的平衡:
- 对于安全性要求高的场景,建议使用 AES256 等强加密算法
- 对于性能要求高的场景,可以考虑使用 AES128 等相对轻量级的加密算法
- 遵循相关的安全标准和合规要求
Q5: 透明数据加密(TDE)和字段级加密有什么区别?
A5: 透明数据加密(TDE)和字段级加密的主要区别在于:
- TDE 对应用程序透明,无需修改代码;字段级加密需要修改应用程序代码
- TDE 对整个表或表空间进行加密;字段级加密只对特定字段进行加密
- TDE 的性能影响相对较大;字段级加密的性能影响相对较小
- TDE 适用于对整个表或表空间的敏感数据进行加密;字段级加密适用于对特定字段的敏感数据进行加密
在实际应用中,应根据业务需求和安全要求选择合适的加密策略,平衡安全性和性能,确保加密功能的有效实施和管理。
