Skip to content

GaussDB 数据加密

传输加密

  • SSL/TLS 加密

    • 支持 SSL/TLS 协议,加密客户端与数据库之间的通信
    • 提供证书管理功能,支持自签名证书和第三方权威证书
    • 配置参数 ssl 控制是否启用 SSL 连接
    • 配置参数 ssl_cert_filessl_key_file 指定证书和私钥路径
  • SSL 配置步骤

    1. 生成 SSL 证书和私钥
    2. 配置数据库参数启用 SSL
    3. 重启数据库生效
    4. 客户端连接时指定 SSL 选项
  • 示例配置

    yaml
    # 数据库配置文件
    ssl = on
    ssl_cert_file = '/data/gaussdb/ssl/server.crt'
    ssl_key_file = '/data/gaussdb/ssl/server.key'
    ssl_ca_file = '/data/gaussdb/ssl/root.crt'

存储加密

  • 透明数据加密 (TDE)

    • 对数据文件进行透明加密,应用无需修改代码
    • 支持 AES-128、AES-192、AES-256 等加密算法
    • 加密范围包括数据文件、日志文件和备份文件
    • 密钥层次结构:主密钥 -> 表空间密钥 -> 数据块密钥
  • TDE 配置步骤

    1. 生成主密钥
    2. 启用 TDE 功能
    3. 创建加密表空间
    4. 在加密表空间中创建表
  • 示例操作

    sql
    -- 生成主密钥
    CREATE SECRET KEY FOR ENCRYPTION 
    WITH ALGORITHM 'AES_256_CBC' 
    IDENTIFIED BY 'MasterKeyPassword';
    
    -- 启用 TDE
    ALTER SYSTEM SET tde_enable = on;
    
    -- 创建加密表空间
    CREATE TABLESPACE encrypted_ts 
    WITH ENCRYPTION = on 
    LOCATION '/data/gaussdb/encrypted_ts';
    
    -- 在加密表空间创建表
    CREATE TABLE encrypted_table (
      id INT PRIMARY KEY,
      data VARCHAR(100)
    ) TABLESPACE encrypted_ts;

列级加密

  • 敏感数据保护

    • 对特定列进行加密,粒度更细
    • 支持多种加密算法和密钥长度
    • 提供加密列的查询和更新功能
    • 适合保护信用卡号、身份证号等敏感字段
  • 列级加密类型

    • 确定性加密:相同明文生成相同密文,支持等值查询
    • 随机加密:相同明文生成不同密文,安全性更高
    • 哈希加密:单向加密,适合密码存储
  • 示例用法

    sql
    -- 创建带列加密的表
    CREATE TABLE user_info (
      user_id INT PRIMARY KEY,
      username VARCHAR(50),
      credit_card VARCHAR(16) 
        ENCRYPTED WITH (ENCRYPTION_TYPE = DETERMINISTIC, 
                        ALGORITHM = 'AES_256_CBC', 
                        IDENTIFIED BY 'ColumnKeyPassword')
    );
    
    -- 插入数据
    INSERT INTO user_info VALUES (1, 'user1', '1234567890123456');
    
    -- 查询数据(自动解密)
    SELECT * FROM user_info;

密钥管理

  • 密钥类型

    • 主密钥:用于加密其他密钥,是加密体系的核心
    • 表空间密钥:用于加密表空间数据
    • 列密钥:用于加密特定列数据
    • SSL 密钥:用于传输加密
  • 密钥管理功能

    • 密钥生成:支持自动和手动生成密钥
    • 密钥轮换:定期更换密钥,提高安全性
    • 密钥备份:支持密钥备份和恢复
    • 密钥销毁:安全删除不再使用的密钥
  • 密钥轮换示例

    sql
    -- 生成新的主密钥
    CREATE SECRET KEY FOR ENCRYPTION 
    WITH ALGORITHM 'AES_256_CBC' 
    IDENTIFIED BY 'NewMasterKeyPassword';
    
    -- 轮换主密钥
    ALTER SYSTEM ROTATE ENCRYPTION KEY;

加密性能影响

  • 传输加密性能

    • SSL 加密会增加 CPU 开销,约 5%-15%
    • 建议在生产环境中启用传输加密
    • 可通过调整 SSL 协议版本和加密算法平衡安全性和性能
  • 存储加密性能

    • TDE 加密主要影响 IO 操作,约 10%-20%
    • 列级加密影响特定列的查询和更新性能
    • 建议对敏感数据进行加密,非敏感数据可考虑不加密

加密合规性

  • 支持的合规标准

    • GDPR(通用数据保护条例)
    • HIPAA(健康保险流通与责任法案)
    • PCI DSS(支付卡行业数据安全标准)
    • 等保 2.0(网络安全等级保护制度)
  • 合规性配置建议

    • 启用传输加密保护数据传输安全
    • 对敏感数据启用存储加密
    • 定期进行密钥轮换
    • 实施严格的访问控制
    • 保留完整的审计日志

加密故障排除

  • 常见问题及解决方法

    • SSL 连接失败:检查证书有效性和配置参数
    • TDE 解密失败:检查主密钥状态和表空间配置
    • 性能下降:调整加密算法或考虑部分数据加密
    • 密钥丢失:使用备份密钥恢复,或重新初始化加密系统
  • 诊断工具

    • 使用 gs_sslcmd 工具测试 SSL 连接
    • 查看数据库日志定位加密相关错误
    • 使用 gs_checkperf 工具分析加密性能影响

常见问题(FAQ)

Q1: GaussDB 支持哪些加密算法?

A1: GaussDB 支持多种加密算法,包括 AES-128、AES-192、AES-256、SM4 等对称加密算法,以及 RSA、ECC 等非对称加密算法。不同加密场景支持的算法可能有所不同。

Q2: 如何启用 GaussDB 的传输加密?

A2: 启用传输加密需要以下步骤:1)生成 SSL 证书和私钥;2)在数据库配置文件中设置 ssl = on 并指定证书路径;3)重启数据库服务;4)客户端连接时指定 SSL 选项。

Q3: TDE 加密会影响数据库性能吗?

A3: TDE 加密主要影响 IO 操作性能,一般会带来 10%-20% 的性能开销。具体影响程度取决于硬件配置、数据量和查询模式。对于敏感数据,建议权衡安全性和性能后决定是否启用 TDE。

Q4: 如何备份和恢复 GaussDB 的加密密钥?

A4: 可以使用 GaussDB 提供的密钥管理工具备份和恢复加密密钥。备份密钥时需要设置安全的密码,恢复时使用相同密码解密。建议将密钥备份存储在安全的离线位置。

Q5: 列级加密和 TDE 有什么区别?

A5: 列级加密只对表中的特定列进行加密,粒度更细,适合保护个别敏感字段;TDE 对整个表空间进行加密,透明度更高,应用无需修改代码。可以根据实际需求选择合适的加密方式,也可以结合使用。