表级存储加密
功能描述
Vastbase支持通过密码卡对开启加密的表中数据进行加密存储。该功能涉及的内容如下:
通过环境变量配置使用光电安辰密码卡进行加解密。
修改了三未信安和江南天安的存储加密使用流程。
创建表时使用with语句携带参数enable_tde表示开启透明加密。
enable_tde
参数说明: 透明数据加密功能开关。创建加密表前需要将此参数置为on。当前参数值为off时,禁止创建新的加密表,对于已经创建的加密表只在读取数据时解密,写入数据时不再加密。
该参数属于POSTMASTER类型参数,请参考[重设参数表1]()中对应设置方法进行设置。
取值范围: 布尔型
on:开启透明数据加密功能。
off:关闭透明数据加密功能。
默认值:off
注意事项
使用该功能必须配置对应的硬件密码卡,并配置相关的系统环境变量,具体配置请参考使用流程。
由于索引号会随着加密卡而变化,因此配置参数CRYPTDEV_KEY和dek_info只有在长度为128位时才是可用于表加密的密钥索引。
加密索引的查询方法如下:
1、使用root用户登录。
2、切换到光电安辰加密卡工具目录(路径以实际为准),执行如下命令:
./kmt
3、输入3(密钥管理)回车、输入1(查看密钥状态)回车、输入5(密钥加密密钥)回车,显示如下所示内容,其中长度为128位的就是可用于表加密的密钥索引。
使用流程
光电安辰密码卡
1、配置光电安辰密码卡。
2、获取光电安辰的硬件动态库文件(libskf.so、libsdf.so),并将库文件拷贝到数据库实例所在目录下,使库文件和hwcipher.so处在同一目录(可自定义路径)。
3、在~/.bashrc文件中配置如下环境变量:
设置环境变量CRYPTDEV_LIBPATH为动态库所在路径(不需要包含动态库名称)。
设置环境变量
CRYPTDEV_TYPE=gdaccard
表示使用光电安辰密码卡进行数据加密。设置环境变量
CRYPTDEV_KEY=master_key
指明为加密表生成数据加密密钥的密钥索引。
4、设置GUC参数enable_tde=on
,创建表时使用with设置enable_tde=on
开启存储加密,并可以使用dek_info指定表加密密钥索引。例如:
内部自动生成数据加密密钥。
create table t1 (context text) with (enable_tde=on);
指定加密密钥索引。
create table t1 (context text) with (enable_tde=on,dek_info=1);
江南天安密码机
1、配置江南天安加密机。
2、获取江南天安的硬件动态库文件(libTassSDF4GHVSM.so)和配置文件(tassConfig.ini),将库文件和数据库实例的lib/postgresql目录下hwcipher.so放在同一目录(该目录用户可以自定义)。
3、在~/.bashrc文件中配置如下环境变量:
设置环境变量CRYPTDEV_LIBPATH为硬件动态库libTassSDF4GHVSM.so和hwcipher.so所在路径(不要包含动态库名称)。
设置环境变量CRYPTDEV_CFG_PATH为江南天安配置文件tassConfig.ini所在路径。
设置环境变量
CRYPTDEV_TYPE=jntakms
表示使用江南天安密码机进行数据加解密。设置环境变量
CRYPTDEV_KEY=master_key
指明为加密表生成数据加密密钥的密钥索引。
4、设置GUC参数enable_tde=on
,创建表时使用with设置enable_tde=on
开启存储加密,并可以使用dek_info指定表加密密钥索引。例如:
内部自动生成数据加密密钥。
create table t1 (context text) with (enable_tde=on);
指定加密密钥索引。
create table t1 (context text) with (enable_tde=on,dek_info=1);
三未信安KMS
三未信安存储加密流程同江南天安,区别在于步骤3,环境变量CRYPTDEV_TYPE和CRYPTDEV_KEY。
CRYPTDEV_TYPE=swkms
CRYPTDEV_KEY为三未kms秘钥名称
示例
1、服务器已安装配置光电安辰密码卡。
2、在~/.bashrc文件中配置环境变量。
vi ~/.bashrc
添加如下内容(CRYPTDEV_LIBPATH已实际路径为准):
export CRYPTDEV_TYPE=gdaccard
export CRYPTDEV_LIBPATH=/home/wzr1
export CRYPTDEV_KEY=1
3、重新加载配置文件。
source ~/.bashrc
4、连接数据库安装用户,启动数据库。
vb_ctl start
5、连接数据库更改GUC参数。
alter system set enable_tde=on;
6、重启数据库服务并连接数据库。
vb_ctl restart
vsql -r
7、创建加密表并插入数据。
create table tb1(col_int2 int2 primary key,col_int int,col_integer integer(5,2),col_int4 int4,col_int8 int8)with(enable_tde=on,dek_info=2);
create table tb2(id int,col_char char(10) not null,col_nchar nchar(5),col_character_varying character varying(30),col_varchar2 varchar2(20))with(enable_tde=on);
insert into tb1 values(1,10,15.34,17,25);
insert into tb1 values(2,20,null,17,49);
insert into tb1 values(3,40,148.66,17,3);
insert into tb1 values(4,10,57.3,null,1196);
insert into tb1 values(5,10,9,null,2);
insert into tb2 values(1,'abc','abcde',17,' ');
insert into tb2 values(2,'abc ','112a','mmm',null);
insert into tb2 values(3,'cccc','mmno1',17,'');
insert into tb2 values(4,'abc','ccdef',null,null);
insert into tb2 values(5,'wow','aaaaa','okkk',2);
insert into tb2 values(6,'cool','4%1','k',265);
8、执行检查点让数据落盘。
checkpoint;
9、查看物理文件名称。
select pg_relation_filepath('tb1');
select pg_relation_filepath('tb2');
返回如下结果表示表加密成功:
10、切换到$PGDATA/base目录下,使用如下命令查询物理文件加密后的信息(文件名为步骤9查询到的物理文件名称)。
hexdump -C 文件名
如下所示,物理文件返回加密后的信息: