1. 首页 > DB2教程 > 正文

DB2教程FG043-DB2加密与数据安全实战

风哥教程参考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;

TBSPACE ENCRYPTED
———— ———
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

# 更新DBM配置
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 keydb file (SSL_SVR_KEYDB) = /home/db2inst1/sslkey.kdb
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
  • 加密备份
  • 使用强密码策略
  • 启用审计
  • 定期更新补丁
  • 限制网络访问
  • 定期安全评估
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息