跳转至

透明存储加密

透明存储加密

本节主要介绍SeaboxMPP透明存储加密相关概念及使用方式、建议应用场景等内容。

透明存储加密(TDE)是指数据在写到磁盘上时对其进行加密,当读取数据进行解密,文件在硬盘上是密文,在内存中是明文。如下图所示:

存储加密架构示意图

透明存储加密分类

  • 从加密范围上讲包括表级加密和实例级加密
  • 从加密方式上讲包括软加密和硬加密
表级加密
  • 配置 使用数据库的透明存储加密需要打开开关enable_tde,透明存储加密分为软加密和硬加密两种方式,配置方式如下:
  • 软加密(密钥管理及加密过程通过软件实现)

    • 配置参数
      ENABLE_HARD_ENCRYPT = OFF
      
    • 创建主密钥
    CREATE MASTER ENCRYPTION KEY BY PASSWORD 'password';
    
    • 加载主密钥

    LOAD MASTER ENCRYPTION KEY BY PASSWORD 'password';
    
    * 硬加密(密钥管理及加密过程通过外置加密卡实现) * 安装并配置好加密卡 * 配置参数
    ENABLE_HARD_ENCRYPT = ON
    
    * 语法 软加密和硬加密的语法相同

  • 建表

    CREATE TABLE table_name ... WITH (ENABLE_TDE = ON, ENCRYPTION_NAME = '***' );
    

  • 切换加密表的加密开关
    -- 打开
    ALTER TABLE table_name SET (ENABLE_TDE = ON);
    -- 关闭
    ALTER TABLE table_name SET (ENABLE_TDE = OFF);
    
  • 删除表级数据加密密钥
    DROP DATA ENCRYPTION KEY FOR table_name;
    
  • 使用约束
    • 不支持sequence加密,不支持系统表加密
    • 表的加密算法指定后不支持更改
    • 若建表时未开启加密功能,后续无法再转换为加密表
    • 列存表不支持切换加密开关
实例级加密
  • 配置
  • 初始化时,软件自动配置enable_hard_encrypt

    • initdb时传入-C cmk_id
    • 若cmk_id>0则enable_hard_encrypt为true,并且自动检查加密设备,若未检测到加密设备或者打开加密设备失败,则报错退出
    • 其他情况下enable_hard_encrypt为false
  • 软加密

  • 密钥文件encryption_key.sh,且具有可执行权限
    % cat /somewhere/encryption_key.sh
    #!/bin/sh
    echo 882fb7c12e80280fd664c69d2d636913
    
    % chmod +x /somewhere/encryption_key.sh
    
  • 单机

    • 软件会自动将global_cmk_id=0写到配置文件中
      initdb -D $SDDATA -K /somewhere/encryption_key.sh
      
    • 集群
    • 安装目录中存放密钥文件,如encryption_key.sh,具有可执行权限
    • 需要在seabox-site.yml文件中配置encryption_cmk_id : 0
      coordinator:                                    # 集群coordinator节点配置
      base_port : 3000
      base_data_dir : /home/seabox/sdsql/coordinatordd
      encryption_cmk_id : 0
      
  • 硬加密

    • 单机

      • 密钥路径可以任意指定,数据库初始化时,将从加密卡读取到的加密密钥存储在该文件中
      • 传入的cmk_id须在加密卡允许的范围内
        initdb -D $SDDATA -C cmk_id -K /somewhere/encryption_key.sh
        
    • 集群

    • 需要在seabox-site.yml文件中配置encryption_cmk_id(加密卡允许的范围内)
      coordinator:                                    # 集群coordinator节点配置
      base_port : 3000
      base_data_dir : /home/seabox/sdsql/coordinatordd
      encryption_cmk_id : 1
      
    • 密钥文件会自动生成,并存放到数据目录下,mirror节点的密钥文件从由primary节点拷贝而来