GBase 8a MPP Cluster 数据加密提供对数据库落地数据的软加密功能,用来满足用户的安全需求,提高系统的安全性。数据加密按照数据文件中的 DC 为最小单位进行,可以实现表级或者列级不同粒度的加密要求。数据库中所有加密数据都使用同一个密钥,系统启动时会自动读取已创建的密钥文件内容。数据使用密钥文件内容加解密后,密钥文件内容就不能再改变。
数据加密支持的操作如下:
支持加密关键字encrypt建表;
支持表级或者列级不同粒度的加密要求;
支持表加密属性的查询;
支持密钥证书管理包括密钥证书的创建、打开、关闭、口令修改、密钥转换操作;
支持密钥类型转换,即从明文密钥转换到密文密钥,或从密文密钥转换到明文密钥:
•明文密钥:无须用户口令,可随机生成也可手动输入;
•密文密钥:须用户输入口令,根据口令对随机生成的密钥加密存储;
支持查询当前密钥证书状态;
支持行存列加密。
创建加密表和列
用户通过建表命令create table和encrypt关键字创建带encrypt属性的表或者列,也可以通过create table like命令建表。但是不支持alter命令给表或列增加encrypts属性。
示例:
创建加密表: create table t1 (a int, b varchar(5)) encrypt;
创建加密列: create table t1 (a int, b varchar(5) encrypt);
查看加密属性: show create table t1;
创建密钥证书
密钥证书的管理需要管理员用户通过SQL方式处理。证书存放在config目录,集群环境下,gnode 与gcluster都会生成相同的密钥证书文件:
gnode:$GBASE_BASE/config/encryption.crt
gcluster:$GCLUSTER_BASE/config/encryption.crt
创建证书: CREATE ENCRYPTION CERTIFICATE IDENTIFIED BY‘password’[CONTENT‘content_value’]
其中: password是密钥证书口令,content_value是密钥内容关键字,可选项,如果不指定该关键字,则创建时content_value由系统自动生成密钥;如果指定,则需要用户手动输入密钥,内容不做限制,最大支持128字节。
如果password为空,则创建明文密钥证书,不需要口令;如果password非空,则创建密文密钥证书,需要口令;密钥证书只有一份不能重复创建。
打开和关闭证书
打开证书: ALTER ENCRYPTION CERTIFICATE OPEN IDENTIFIED BY ‘password’
根据口令打开密文密钥证书,需要用户输入口令对证书解密获取加密密钥,才能对存储数据加密/解密。
关闭证书: ALTER ENCRYPTION CERTIFICATE CLOSE;
关闭后无法对数据加密/解密,会影响加密列的DML操作注:明文密钥不可关闭,需将明文密钥转为密文密钥才可以关闭。
显示证书状态
SELECT * FROMINFORMATION_SCHEMA.ENCRYPTION_CERTIFICATE_STATUS;
修改证书口令
ALTERENCRYPTION CERTIFICATE IDENTIFIED BY ‘old_pwd’ TO‘new_pwd’
说明: 为了提高口令的安全性,可以对原证书口令进行修改,修改口令不会改变加密密钥,只是使用新口令对原有密钥重新加密生成新证书。
明文、密文密钥转换
明文密钥转换为密文密钥:ALTERENCRYPTIONCERTIFICATE IDENTIFIED BY‘’ TO ‘password’
密文密钥转换为明文密钥:ALTERENCRYPTIONCERTIFICATE IDENTIFIED BY ’ password’TO‘’
说明:
明文密钥转换为密文密钥,password 不能为空;
明文加密转换为密文加密,即通过口令将明文密钥加密作为密文密钥证书,数据加密所用密钥不变。
密文密钥转换为明文密钥,password 不能为空;
密文密钥转换为明文密钥,即通过口令将密文密钥解密获取到的密钥作为明文密钥,数据加密所用密钥不变;
数据加密的集群配置
密钥证书的口令管理,如果开启密码检测须设置password_format_option、password_min_length,如果未开启,则口令规则及长度不做限制;
在gnode节点config目录下的配置文件增加encrypt_server_host(指向 gcluster的主机IP,可以多个,用逗号分隔),encrypt_server_port(指向 gcluster的server port,默认 5258)参数,用于密文加密情况下,集群gnode节点重启服务后主动向server端获取密钥数据;




