风哥教程参考DB2官方文档Security Guide、Encryption Guide等内容,详细介绍DB2的数据加密功能、配置方法和最佳实践。更多视频教程www.fgedu.net.cn
目录大纲
Part01-加密基础概念
1.1 DB2加密功能
DB2提供多种加密方式:
- 透明数据加密(TDE):加密整个表空间
- 列级加密:加密敏感数据列
- 备份加密:加密备份文件
- SSL/TLS:加密网络传输
- 密钥管理:管理加密密钥
1.2 加密算法
| 算法 | 密钥长度 | 描述 |
|---|---|---|
| AES | 128/192/256位 | 高级加密标准,推荐使用 |
| 3DES | 168位 | 三重数据加密算法 |
| RSA | 1024/2048位 | 非对称加密,用于密钥交换 |
1.3 密钥管理
- 本地密钥存储:使用本地密钥库
- 集中密钥管理:使用IBM Key Protect或第三方KMIP服务
- 密钥轮换:定期更换密钥
- 密钥备份:安全备份密钥
Part02-透明数据加密(TDE)
2.1 配置TDE
gsk8capicmd_64 -keydb -create -db /home/db2inst1/keystore.p12 -pw “MasterPassw0rd!” -type pkcs12 -stash
# 添加主密钥
gsk8capicmd_64 -secretkey -create -db /home/db2inst1/keystore.p12 -pw “MasterPassw0rd!” -label “DB2MasterKey” -size 256
# 配置实例使用密钥库
db2 update dbm cfg using KEYSTORE_TYPE PKCS12
db2 update dbm cfg using KEYSTORE_LOCATION /home/db2inst1/keystore.p12
db2 update dbm cfg using KEYSTORE_STASH /home/db2inst1/keystore.sth
# 重启实例
db2stop force
db2start
2.2 创建加密表空间
CREATE LARGE TABLESPACE encrypted_ts
PAGESIZE 16K
MANAGED BY AUTOMATIC STORAGE
USING STOGROUP IBMSTOGROUP
EXTENTSIZE 32
PREFETCHSIZE 64
BUFFERPOOL BP16K
ENCRYPT USING ‘AES256’;
# 在加密表空间中创建表
CREATE TABLE fgedu_encrypt (
id INT,
name VARCHAR(100),
ssn VARCHAR(20),
credit_card VARCHAR(20)
) IN encrypted_ts;
# 查看加密表空间
SELECT TBSPACE, ENCRYPTED FROM SYSCAT.TABLESPACES;
———— ———
SYSCATSPACE N
USERSPACE1 N
ENCRYPTED_TS Y
2.3 加密现有数据库
db2 backup database fgedb to /db2/backup
# 恢复数据库并启用加密
db2 restore database fgedb from /db2/backup replace existing encrypt;
# 验证加密
SELECT ENCRYPT_ALGORITHM, ENCRYPT_MODE FROM TABLE(SYSPROC.ADMIN_GET_ENCRYPTION_INFO()) AS T;
Part03-列级加密
3.1 使用加密函数
CREATE TABLE fgedu_customer (
id INT PRIMARY KEY,
name VARCHAR(100),
ssn_encrypted VARCHAR(200) FOR BIT DATA,
credit_card_encrypted VARCHAR(200) FOR BIT DATA
);
# 插入加密数据
INSERT INTO fgedu_customer (id, name, ssn_encrypted, credit_card_encrypted)
VALUES (
1,
‘张三’,
ENCRYPT_AES256(‘123-45-6789’, ‘MySecretKey!’),
ENCRYPT_AES256(‘4111-1111-1111-1111’, ‘MySecretKey!’)
);
# 查询解密数据
SELECT
id,
name,
DECRYPT_CHAR(ssn_encrypted, ‘MySecretKey!’) as ssn,
DECRYPT_CHAR(credit_card_encrypted, ‘MySecretKey!’) as credit_card
FROM fgedu_customer;
3.2 使用密钥托管
CREATE ENCRYPTION KEY customer_key
ALGORITHM AES256;
# 使用密钥加密
INSERT INTO fgedu_customer (id, name, ssn_encrypted, credit_card_encrypted)
VALUES (
2,
‘李四’,
ENCRYPT_AES256(‘987-65-4321’, ”, ”, ‘CUSTOMER_KEY’),
ENCRYPT_AES256(‘5555-5555-5555-4444’, ”, ”, ‘CUSTOMER_KEY’)
);
# 使用密钥解密
SELECT
id,
name,
DECRYPT_CHAR(ssn_encrypted, ”, ”, ‘CUSTOMER_KEY’) as ssn,
DECRYPT_CHAR(credit_card_encrypted, ”, ”, ‘CUSTOMER_KEY’) as credit_card
FROM fgedu_customer;
3.3 备份加密
db2 backup database fgedb to /db2/backup encrypt using ‘BackupPassw0rd!’;
# 恢复加密备份
db2 restore database fgedb from /db2/backup decrypt using ‘BackupPassw0rd!’;
Part04-SSL/TLS配置
4.1 创建SSL证书
gsk8capicmd_64 -keydb -create -db /home/db2inst1/sslkey.kdb -pw “SSLPassw0rd!” -type cms -stash
# 创建自签名证书
gsk8capicmd_64 -cert -create -db /home/db2inst1/sslkey.kdb -pw “SSLPassw0rd!” -label “DB2ServerCert” -dn “CN=db2server.fgedu.net.cn,O=FGedu,ST=Beijing,C=CN” -size 2048 -signature_alg SHA256WithRSA -default_cert yes
# 导出证书
gsk8capicmd_64 -cert -extract -db /home/db2inst1/sslkey.kdb -pw “SSLPassw0rd!” -label “DB2ServerCert” -target /home/db2inst1/db2server.arm -format ascii
4.2 配置服务器端SSL
db2 update dbm cfg using SSL_SVR_KEYDB /home/db2inst1/sslkey.kdb
db2 update dbm cfg using SSL_SVR_STASH /home/db2inst1/sslkey.sth
db2 update dbm cfg using SSL_SVR_LABEL DB2ServerCert
db2 update dbm cfg using SSL_VERSIONS TLSV12
# 更新数据库配置
db2 update db cfg for fgedb using SSL_VERSIONS TLSV12
# 配置DB2COMM
db2set DB2COMM=SSL,TCPIP
# 重启实例
db2stop force
db2start
# 查看SSL配置
db2 get dbm cfg | grep -i ssl
SSL server stash file (SSL_SVR_STASH) = /home/db2inst1/sslkey.sth
SSL server certificate label (SSL_SVR_LABEL) = DB2ServerCert
SSL version (SSL_VERSIONS) = TLSV12
4.3 配置客户端SSL
gsk8capicmd_64 -cert -add -db /home/db2client/sslclient.kdb -pw “ClientPassw0rd!” -label “DB2ServerCert” -file /home/db2client/db2server.arm -format ascii -trust enable
# 配置客户端db2dsdriver.cfg
# 使用SSL连接
db2 connect to FGEDB_SSL user db2inst1 using password
Part05-风哥经验总结与分享
5.1 加密最佳实践
- 使用TDE加密整个数据库
- 对敏感列使用列级加密
- 使用SSL/TLS加密网络传输
- 定期轮换加密密钥
- 安全备份密钥库
- 使用强密码保护密钥
- 监控加密操作
5.2 常见加密问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 性能下降 | 加密开销 | 使用硬件加密加速,优化加密范围 |
| 密钥丢失 | 密钥库损坏 | 定期备份密钥库,使用密钥管理系统 |
| 连接失败 | SSL配置错误 | 检查证书和密钥库配置 |
| 解密失败 | 密钥不匹配 | 确保使用正确的密钥 |
5.3 安全加固清单
- 启用TDE加密
- 配置SSL/TLS
- 加密备份
- 使用强密码策略
- 启用审计
- 定期更新补丁
- 限制网络访问
- 定期安全评估
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
