GBase 8a 的数据加密及实现

数据加密概述  

       GBase 8a 数据加密是提供对数据库落地数据的软加密功能, 用来满足用户的安全需求,提高系统的安全性。数据加密按照 seg 文件中的 DC 为最小单位进行,可以实现表级或者列级不同粒度的加密要求。数据库中所有加密数据都使用同一个密钥,系统启动时会自动读取已创建的密钥文件内容。数据使用密钥文件内容加解密后,密钥文件内容就不能再改变。下图是数据加密功能原理图:

         

       数据加密支持的操作如下:

  •        支持加密关键字 encrypt 建表;
  •        支持表级或者列级不同粒度的加密要求;
  •        支持表加密属性的查询;
  •        支持密钥证书管理包括密钥证书的创建、打开、关闭、口令修改、密钥转换操作
  •        支持密钥类型转换,即从明文密钥转换到密文密钥,或从密文密钥转换到明文密钥:

              明文密钥:无须用户口令,可随机生成也可手动输入;
              密文密钥:须用户输入口令,根据口令对随机生成的密钥加密存储;

  •        支持查询当前密钥证书状态;
  •        支持行存列加密。  

数据加密操作  

       创建加密表和列:

       用户通过建表命令 create table 和 encrypt 关键字创建带 encrypt 属性的表或者列,也可以通过 create table like 命令建表。但是不支持 alter 命令修改。

       创建加密表示例如下:

create table t1 (a int, b varchar(5)) encrypt;

       创建加密列示例如下:

create table t1 (a int, b varchar(5) encrypt);

       查看加密属性  

      使用 show create table 可以查询加密属性,表的加密属性会传递给列,列的加密属性不会影响表。

gbase> create table tb(a int encrypt, b varchar(10) encrypt);
Query OK, 0 rows affected (Elapsed: 00:00:00.03)
gbase> show create table tb;
+-------+-------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------
+
| tb | CREATE TABLE "tb" (
"a" int(11) DEFAULT NULL ENCRYPT ,
"b" varchar(10) DEFAULT NULL ENCRYPT
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' |
+-------+--------------------------------------------------------------------------
---+
1 row in set (Elapsed: 00:00:00.07)

密钥证书管理  

       密钥证书的管理需要管理员用户通过 SQL 方式处理。证书存放在 config 目录,集群环境下, gnode 与 gcluster 都会生成相同密钥证书文件:

gnode: $GBASE_BASE/config/encryption.crt
gcluster: $GCLUSTER_BASE/config/encryption.crt

创建证书    

CREATE ENCRYPTION CERTIFICATE IDENTIFIED BY ’ password’ [CONTENT ‘密钥内容’ ]

-----------创建明文密钥证书示例
gbase> create encryption certificate identified by „‟;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
-----------证书重复创建
gbase> create encryption certificate identified by „‟;
ERROR 1835 (HY000): encryption certificate already exists.
-----------创建密文密钥证书示例
gbase> create encryption certificate identified by 'ddd22';
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
-----------证书重复创建
gbase> create encryption certificate identified by 'ddd22';
ERROR 1835 (HY000): encryption certificate already exists.
-----------口令检测不正确(启用了密码安全检查,须配置 password_format_option、
password_min_length 参数)
gbase> create encryption certificate identified by 'ddd~';
ERROR 1802 (HY000): Invalid password format,length should >= 4 and contain 'number'.

       打开和关闭证书  

ALTER ENCRYPTION CERTIFICATE OPEN IDENTIFIED BY ‘password’

       根据口令打开密文密钥证书, 需要用户输入口令对证书解密获取加密密钥,才能对存储数据加密/解密。

ALTER ENCRYPTION CERTIFICATE CLOSE;

       关闭密钥证书, 关闭后无法对数据加密,会影响加密列的 DML 操作, 示例如下:  

-----------打开密钥证书示例
gbase> alter encryption certificate open identified by '1111';
Query OK, 0 rows affected (Elapsed: 00:00:04.76)
------------重复 open
gbase> alter encryption certificate open identified by '1111';
ERROR 1829 (HY000): encryption certificate already open.
-----------证书不存在
gbase> alter encryption certificate open identified by '1111';
ERROR 1829 (HY000): encryption certificate not exists.
-----------解密失败
gbase> alter encryption certificate open identified by '2222';
ERROR 1829 (HY000): decrypt failed, please check password.
-----------关闭密钥证书
gbase> alter encryption certificate close;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> insert into t1 values(4);
ERROR 1838 (HY000): Encrypt key invalid.
gbase> select * from t1;
ERROR 1838 (HY000): Decrypt key invalid.

       显示证书状态  

SELECT * FROM INFORMATION_SCHEMA.ENCRYPTION_CERTIFICATE_STATUS;

 增加视图 ENCRYPTION_CERTIFICATE_STATUS,显示证书状态,示例如下:

gbase> SELECT * FROM INFORMATION_SCHEMA.ENCRYPTION_CERTIFICATE_STATUS;
+------+-----------+----------+-------------+
| HOST | IS_CREATE | KEY_TYPE | OPEN_STATUS |
+------+-----------+----------+-------------+
| | YES | 0 | ON |
+------+-----------+----------+-------------+
1 row in set (Elapsed: 00:00:00.00)

       修改证书口令  

ALTER ENCRYPTION CERTIFICATE IDENTIFIED BY ‘old_pwd’ TO ‘new_pwd’

       修改密文密钥口令, old_pwd、 new_pwd 均非空;
       为了提高口令的安全性,可以对原证书口令进行二次修改,修改口令不会改变加密密钥,只是使用新口令对原有密钥重新加密生成新证书;

gbase> alter encryption certificate identified by '1111' to '2222';
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
------------旧口令解密失败
gbase> alter encryption certificate identified by '1111' to '2222';
ERROR 1829 (HY000): decrypt failed, please check password.

       明文、密文密钥转换  

ALTER ENCRYPTION CERTIFICATE IDENTIFIED BY ‘’ TO ’ password’

       明文密钥转换为密文密钥, password 不能为空;
       明文加密转换为密文加密,即通过口令将明文密钥加密作为密文密钥证书,数据加密所用密钥不变。

ALTER ENCRYPTION CERTIFICATE IDENTIFIED BY ‘ password‘ TO ‗‘

       密文密钥转换为明文密钥, password 不能为空;密文密钥转换为明文密钥,即通过口令将密文密钥解密获取到的密钥作为明文密钥证书,数据加密所用密钥不变;

-----------明文密钥转密文密钥
gbase> alter encryption certificate identified by „‟ to „2222‟;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
-----------证书不存在
gbase> alter encryption certificate identified by „‟ to „2222‟;
ERROR 1835 (HY000): encryption certificate not exists.
-----------密文密钥转明文密钥
gbase> alter encryption certificate identified by 'ddd22' to „‟;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
-----------证书不存在
gbase> alter encryption certificate identified by 'ddd22' to „‟;
ERROR 1835 (HY000): encryption certificate not exists.

       数据加密的集群配置  

       密钥证书的口令管理同密码安全,如果开启密码检测须设置 password_format_option、 password_min_length,如果未开启,则口令规则及长度不做限制;
       在 gnode 节点 config 目录下的配置文件增加 encrypt_server_host,encrypt_server_port 参数,用于密文加密情况下,集群 gnode 节点重启服务后主动向 server 端获取密钥数据;  

       

       如果整个集群都重启的话,针对密文方式,需要手动执行 open(打开密钥)操作方可对加密列做相关 dml 操作。 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值