透明存储加密
透明存储加密¶
本节主要介绍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
- initdb时传入
-
软加密
- 密钥文件
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
- 软件会自动将global_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节点拷贝而来
-