1.1. 透明存储加密简介¶
透明存储加密使您能够加密敏感数据,例如信用卡号或身份证号码。
-
透明存储加密
透明存储加密使您能够加密存储在表、表空间以及WAL日志中的敏感数据。
-
配置透明存储加密的工作原理
KingbaseES数据库透明加密框架使用钱包机制管理加密。
-
使用透明存储加密的优势
透明存储加密可确保敏感数据得到加密,满足合规性要求,并提供可简化加密操作的功能。
-
配置透明存储加密权限
若要配置透明存储加密,必须授予您管理权限或系统权限。
-
透明存储加密的类型和组件
透明存储加密可以应用表、表空间以及WAL日志(加密粒度为单条WAL日志)加密级别。
1.1.1. 关于透明存储加密¶
透明存储加密能够加密存储在表、表空间以及WAL日志中的敏感数据。加密数据后,当授权用户或应用程序访问此数据时,将以透明方式解密此数据。透明存储加密有助于在存储介质或数据文件被盗时保护存储在介质上的静态数据。KingbaseES实现了数据在写到磁盘上时对其进行加密,当授权用户重新读取数据时再对其进行解密。无需对应用程序进行修改,授权用户甚至不会注意到数据已经在存储介质上加密,加密解密过程对用户都是透明的。
KingbaseES数据库使用身份验证、授权和审计等机制来保护数据库中的数据,但不保护存储在操作系统数据文件中的数据。为了保护这些数据文件,KingbaseES数据库提供了透明存储加密,对存储在数据文件中的敏感数据进行加密。为了防止未经授权的解密,将加密密钥存储加密容器中,使用钱包机制管理。
9.1.2. 透明存储加密的工作原理¶
密钥管理中包括主密钥的生成,对象密钥的生成,对象密钥同步到备机等内容,其中钱包机制是最核心最重要的。KingbaseES数据库透明加密框架中引入了钱包概念,钱包是一个加密容器,用于存储所有密钥,包括主密钥文件和对象密钥文件。钱包的另一个优点是可以对密钥进行统一管理,与数据文件分开,因此,没有钱包,即使得到了数据文件,数据也是不能解密的,从而大大提高了数据的安全性。钱包需要经常备份,防止钱包因系统损坏或硬件设备导致的丢失钱包的风险。
对于钱包自身来说,支持设置钱包密码。在数据库使用或关闭钱包时需要先通过钱包密码验证,否则将不能使用钱包。创建加密对象时,钱包必须处于OPEN的状态;若钱包处于CLOSE的状态,则不能创建加密对象。修改钱包密码时,钱包必须处于CLOSE的状态。安全管理员可以通过SQL命令修改钱包密码。钱包的使用如下所示:
打开钱包:
OPENUP WALLET WITH PASSWORD "123456";
关闭钱包:
CLOSEUP WALLET WITH PASSWORD "123456";
修改钱包密码(必须先关闭钱包):
ALTER WALLET WITH PASSWORD "654321"; INSERT INTO TEST_ENC_NOKEY VALUES(GENERATE_SERIES(1, 10000), 'KINGBASE'); CHECKPOINT; -- select table test data correctness SELECT COUNT(*) FROM TEST_ENC_NOKEY; SELECT * FROM TEST_ENC_NOKEY LIMIT 5; -- update table test UPDATE TEST_ENC_NOKEY SET NAME = 'kingbase' WHERE ID = 1; -- delete table test DELETE FROM TEST_ENC_NOKEY; SELECT COUNT(*) FROM TEST_ENC_NOKEY; -- drop table test DROP TABLE TEST_ENC_NOKEY; -- alter tablespace test ALTER TABLESPACE ENC_TS_NOKEY SET (seq_page_cost = 1.0); ALTER TABLESPACE ENC_TS_NOKEY SET (encryption = false); -- drop tablespace test DROP TABLESPACE ENC_TS_NOKEY;
1.1.3. 使用透明存储加密的优势¶
透明存储加密可确保加密敏感数据满足合规性要求,并提供简化加密操作的功能,优势如下:
-
作为安全管理员,您可以确保敏感数据已加密,因此在存储介质或数据文件被盗或入侵者试图从操作系统访问数据文件时,绕过访问控制数据库。
-
使用透明存储加密可帮助您解决与安全相关的法规遵从性问题。
-
您无需创建辅助表、触发器或视图来为授权用户或应用程序解密数据。表中的数据为数据库用户和应用程序透明地解密。处理敏感数据的应用程序可以使用透明存储加密提供强大的数据加密,而无需修改应用程序。
-
对于访问该数据的数据库用户和应用程序,数据被透明地解密。数据库用户和应用程序不需要知道他们正在访问的数据是以加密形式存储的。
-
透明存储加密可以在线进行,无需停止数据库服务。
-
数据库系统自动维护密钥管理,用户或应用程序不需要管理加密密钥。
1.1.4. 配置透明存储加密的权限¶
拥有系统特权的用户可以进行表和表空间透明存储加密。对表或表空间加密的用户需要有创建表或表空间的权限。注意的是只要WAL日志加密功能开启,那么所有用户产生的WAL日志都会被加密。只要WAL日志加密功能关闭,那么所有用户产生的WAL日志都不再被加密。
1.1.5. 透明加密的类型和组成部分¶
透明存储加密可以应用于不同对象,本节内容包括如下:
1.1.5.1. 关于透明存储加密类型和组成部分¶
加密对象目前包含表空间、表和WAL日志,对应的加密方式为表空间加密、表加密和WAL日志加密。注意的是表空间加密方式和表加密方式是互斥的,同一加密对象不允许同时支持这两种加密方式。
您可以在表级别、表空间级别以及WAL日志级别加密敏感数据。表加密对选定的表加密数据。表空间加密使您能够加密表空间中存储的所有数据。WAL日志加密是对开启WAL日志加密功能的数据库产生的WAL日志进行加密。表加密、表空间加密和WAL日志加密都使用基于密钥管理的体系结构。未经授权的用户无法从存储和备份文件中读取数据,除非他们拥有密钥来解密数据。
1.1.5.2. 加密插件¶
使用透明加密数据功能时需要在 kingbase.conf
文件中的guc参数 shared_preload_libraries
中加载 sysencrypt
插件。开启加密插件步骤如下所示:
-
修改 kingbase.conf 文件中
shared_preload_libraries
参数。
shared_preload_libraries = 'sysencrypt'
-
新建数据库需要安装扩展
CREATE EXTENSION sysencrypt;
另请参阅
更多加密插件的信息参见 sysencrypt 。
1.1.5.3. 透明存储加密表空间加密的工作原理¶
表空间加密方式目前采用的是页面级的块加密和块解密。对于块加密,分组加密算法需要的待加密数据的长度应为算法数据对齐长度的整数倍,对于流加密算法的待加密数据的长度并没有对齐的要求。块加密是在数据页面需要同步到外存时进行加密操作;从外存读取数据页面到缓冲区时,首先进行解密操作。内存中的数据都是解密后的数据。
示例创建加密表空间,确保打开钱包 CREATE TABLESPACE ENC_TS_NOKEY LOCATION '@TESTTABLESPACE@' WITH (ENCRYPTION = TRUE); --@TESTTABLESPACE@为空间的物理路径 示例在加密表空间下创建加密表 CREATE TABLE TEST(ID INT) TABLESPACE ENC_TS_NOKEY;
1.1.5.4. 密钥管理¶
目前密钥采用三级密钥结构,分别为主密钥和对象密钥和块级密钥。主密钥是唯一的,安全管理员是可以通过SQL命令更新主密钥的。主密钥的作用用于加密对象密钥,主密钥自身加密存储在主密钥文件中。每个加密对象都有一个对象密钥,对象密钥之间是不重复的。块级密钥是根据对象密钥和块标识生成的,加密时使用的密钥就是块级密钥。对象密钥暂时不可更改并且由数据库系统维护。对象密钥是由主密钥加密后根据对象类型不同存储在不同的密钥文件中,密钥文件分为:表空间密钥文件,表密钥文件,用户密钥文件等。注意的是WAL日志密钥存储在主密钥文件中。
1.1.5.5. 支持的加密算法¶
加密框架目前支持内置SM4和RC4算法对数据进行加密。在加密框架下也可以支持用户自定义扩展的加密算法,首先根据数据库提供的API函数编译封装好用户自己的设备库,然后把设备库和设备库所调用的算法库一同放到数据库的LIB目录下。初始化时指定自己的加密方式,包括指定设备库名称,算法库名称,密钥最大长度以及算法对齐长度。对于算法对齐长度,分组加密算法对齐长度是不为0的偶数。对于流加密算法,算法对齐长度指定为0。
API函数主要包括五大类函数:设备管理类函数,密钥管理类函数,加解密算法类函数,数据管理类函数,错误处理类函数。设备管理类函数负责对加密设备的管理,打开加密设备、关闭加密设备等。密钥管理类函数负责密钥管理,包括生成密钥,加载密钥,销毁密钥等。加解密算法类函数负责对数据的加解密。数据管理类函数负责加密前对数据的处理操作。错误处理类函数负责对加解密运行中的错误处理。初始化完成后,就可以使用自己指定的加密算法来使用透明加密的功能。
1.1.5.5.1. 加密引擎适配¶
金仓除了内置了加密库对数据库数据进行加解密,也提供了一些用于用户可以自适配一些加密卡接口,用户需要自己手动实现这个API接口,在编译时需要用到金仓提供的 sysengine.h
头文件。
如果用户成功编译了正确的设备库,需要在 initdb
时通过 -e
参数指定用户自己的加密设备名,并填写相关正确的加密设备相关信息,即可使用用户自适配的加密设备对数据库数据进行加解密。
函数名 | 函数介绍 |
---|---|
DcryptInit | 加密设备的初始化操作(打开算法库等) |
DcryptLoadFuncs | 加密设备的算法库函数加载 |
DcryptOpenEncryptDevice | 打开加密设备(硬件设备一般需要此操作) |
DcryptClose | 关闭加密设备 |
DcryptGenKey | 生成密钥 |
DcryptGetKey | 获取密钥 |
DcryptGetMaxBlockData | 计算最大的块加密长度 |
DcryptReadKey | 读取密钥 |
DcryptLoadKey | 加载密钥(密钥在硬件设备存储) |
DcryptECBlock | 块加密函数 |
DcryptDEBlock | 块解密函数 |
DcryptClean | 清理函数 |
用户需要把编译好的自适配设备库以及算法驱动库放到数据库的lib目录下,并在初始化时指定设备信息用于使用自适配的加密卡,如下:
Device lib: 加密设备库名 Driver lib: 算法驱动库名 Maxkey Len: 密钥最大长度 Algin Num: 算法对齐的最大长度(流算法为0)
KingbaseES支持多加密设备。在数据库运行过程中,可以注册新的加密设备:
-
每个加密设备,对应各自的二级密钥,不同加密设备不通用。
-
如果一个设备被删除,之后又重新注册,应保留不受之前注册的影响。
-
新增在创建加密对象时,可以指定加密设备。
在数据库运行过程中,可以删除已注册的加密设备,但必须是在所有依赖此加密卡的加密对象也被删除完成后操作。如果加密设备已被使用,则不允许删除,直到不再被使用。删除完成后,加密设备应立即不可用。
注意
集群支持多种加密设备注册和删除:
-
主机新增加密设备后,备份同步增加,增加加密设备日志使备机也能在加密卡环境配置完成的情况下加载加密设备。当加密设备需有配置文件时,手动添加,然后重启数据库;
-
加密设备依赖的库文件需要手动部署,之后备机会通过日志自动加载加密设备。
提供查询加密设备的系统视图 sysencrypt.show_encrypt_device ,视图字段信息如下:
名称 | 描述 |
---|---|
Devicelib | 加密设备库名 |
Driverlib | 算法驱动库名 |
Maxkeylen | 密钥的最大长度 |
Align | 算法加解密数据对齐最大长度,分组算法为2的整数倍,流算法为0 |
Isdefault | 是否为数据库内默认加密设备 |
Isuse | 是否正在使用 |
Ip | 加密设备的ip地址 |
1.1.5.5.2. 加密设备的使用¶
1. 注册加密设备接口
函数语法
load_encrypt_device(encmethod text, device text, driver text, maxkeylen int4, algintype int4)
参数说明
encmethod
加密设备名
device
加密设备库
driver
加密算法库
mankeylen
设备密钥的最大长度
algintype
设备使用算法的对齐方式(分组或流)
2. 删除加密设备接口
函数语法
load_encrypt_device(encmethod text)
参数说明
encmethod
加密设备名
3. 加密设备使用
通过创建加密对象时指定加密设备来使用,支持对表加密和表空间加密。
例如:表空间加密
create tablespace xxx location ‘xxx’ with (encryption = true, enckey = ‘xxx’, encmethod = ‘xxx’);
encryption
当前表空间是否是加密
enckey
用户可自己指定的密钥
encmethod
加密对象的加密方式(设备或算法)
1.2. 表加密¶
1.2.1. 关于表加密¶
表加密功能采用加密算法保护数据库表的数据在磁盘上存储不被非法获取。加密的对象包括表文件、及表的索引、辅助文件。以数据库表为粒度指定是否加密。
1.2.2. 表加密的使用¶
1.2.2.1. 创建加密表¶
需要在表的定义最后加上 ENCRYPTED
关键字,可以指定密钥或者使用随机密钥,或者指定表加密设备和算法。如下所示:
CREATE TABLE tablename table definition ENCRYPTED [ BY 'encryptkey' ]; CREATE TABLE tablename table definition ENCRYPTED [ BY [ key = encryptkey ] [ , method = encryptmethod ]];
参数说明
table definition
创建表时的其他设定,如列定义、继承、分区等。表加密功能支持继承表和分区表设置为加密表。
ENCRYPTED
ENCRYPTED必须为语句中最后一个设置项,设定新建表为加密表,生成随机密钥为加密密钥。当指定密钥时使用 ENCRYPTED BY encryptkey
语法。
encryptkey
指定表加密使用的密钥串,字符串最大有效长度16字节,超出长度会被截断。表及表的附属对象使用同一个密钥加密。
encryptmethod
指定加密表的加密方式(设备或算法)。
示例
create table t2 (id int) encrypted; create table t3 (id int) encrypted by '12345678ab'; create table t4 (id int) encrypted by 'key=12345678ab'; create table t5 (id int) encrypted by 'method=rc4,key=12345678ab'; create table t6 (id int) encrypted by 'key=12345678ab,method=rc4'; create table t7 (id int) encrypted by 'method=rc4';
1.2.2.2. 访问、删除加密表¶
加密表的访问方式(DQL、DML)和删除方式(DROP)不受表透明存储加密的影响。
1.2.2.3. 修改加密状态¶
ALTER语法支持修改数据库表的加密状态。修改时可能会重新生成存储文件,当表数据量较大时需要占用大量资源。
修改为加密:
ALTER TABLE tablename ENCRYPTED;
修改为非加密:
ALTER TABLE tablename UNENCRYPTED; ALTER TABLE tablename NOT ENCRYPTED;
修改表的加密算法和密钥 :
ALTER TABLE tablename ENCRYPTED [ BY 'encryptkey' ]; ALTER TABLE tablename ENCRYPTED [ BY [ key = encryptkey ] [ , method = encryptmethod ]];
示例
create table t1 (id int); alter table t1 (id int) encrypted; alter table t1 (id int) encrypted by '12345678ab'; alter table t1 (id int) encrypted by 'key=12345678ab'; alter table t1 (id int) encrypted by 'method=rc4,key=12345678ab'; alter table t1 (id int) encrypted by 'key=12345678ab,method=rc4'; alter table t1 (id int) encrypted by 'method=rc4'; alter table t1 unencrypted; alter table t1 not encrypted;
1.2.2.4. 表的加密状态¶
在KingbaseES中,支持函数和视图的方式判断表是否为加密表。
-
sysencrypt.is_table_encrypted函数
使用sysencrypt.is_table_encrypted 函数来查询表是否加密,加密表返回 t 非加密表返回 f。函数的参数为表名字符串,支持 schema.tablename 和 tablename 的方式,参数使用单引号包括。
SELECT sysencrypt.is_table_encrypted('tablename')
-
sysencrypt.sys_table_encrypt视图
使用 sysencrypt.sys_table_encrypt <sys_table_encrypt>`系统视图显示数据库内的用户表加密状态。视图中的isencrypted字段显示表是否为加密表,加密表为 ``t` 非加密表为 f
。
SELECT * FROM sysencrypt.sys_table_encrypt;
1.3. 表空间加密¶
1.3.1. 关于表空间加密¶
表空间加密使您能够加密表空间中存储的所有数据。表空间加密在读取和写入操作期间对数据进行加密或解密。
1.3.2. 表空间加密的限制¶
表空间是对整个表空间数据加密,所以不受表加密的相关限制,对数据类型、约束和索引都没有要求。
1.3.3. 表空间加密的系统参数¶
设置 sysencrypt.encrypt_user_tablespace
参数,可以指定是否默认对创建的用户表空间加密,默认为false。
1.3.4. 表空间加密的使用¶
1.3.4.1. 创建表空间加密¶
需要在表空间的定义最后加上 encrypted
关键字,可以用 ``by``指定密钥或者使用随机密钥。如下所示:
CREATE TABLESPACE tablesspacename LOCATION '@tablespace@' with(encryption = true [, enckey = encryptkey ] [, encmethod = encryptmethod ]);
参数说明
encryption
标识当前表空间是否为加密表空间,true为是,false为否。
enckey
用户自定义的表空间加密密钥,最大有效长度16字节,超出长度会被截断。默认不指定。
encmethod
加密对象的加密方式(设备或算法)。
示例
创建表空间时,用户不指定密钥:
--------------------------------------- -- TEST ENC TSP WITH NO KEY --------------------------------------- -- create encryption tablespace OPENUP WALLET WITH PASSWORD "k1ngb2se"; CREATE TABLESPACE ENC_TS_NOKEY LOCATION '@testtablespace@' with (encryption = true); -- create encryption table and build index CREATE TABLE TEST_ENC_NOKEY(ID INT, NAME VARCHAR(100)) TABLESPACE ENC_TS_NOKEY; CREATE INDEX INDEX_ENC ON TEST_ENC_NOKEY(ID); -- insert table data INSERT INTO TEST_ENC_NOKEY VALUES(GENERATE_SERIES(1, 10000), 'KINGBASE'); CHECKPOINT; -- select table test data correctness SELECT COUNT(*) FROM TEST_ENC_NOKEY; SELECT * FROM TEST_ENC_NOKEY LIMIT 5; -- update table test UPDATE TEST_ENC_NOKEY SET NAME = 'kingbase' WHERE ID = 1; -- delete table test DELETE FROM TEST_ENC_NOKEY; SELECT COUNT(*) FROM TEST_ENC_NOKEY; -- drop table test DROP TABLE TEST_ENC_NOKEY; -- alter tablespace test ALTER TABLESPACE ENC_TS_NOKEY SET (seq_page_cost = 1.0); ALTER TABLESPACE ENC_TS_NOKEY SET (encryption = false); -- drop tablespace test DROP TABLESPACE ENC_TS_NOKEY;
用户可以指定密钥,通过enckey option来指定加密表空间的密钥:
--------------------------------------- -- TEST ENC TSP WITH KEY --------------------------------------- -- create encryption tablespace CREATE TABLESPACE ENC_TS_KEY LOCATION '@testtablespace@' with (encryption = true, enckey = '123456123456798123456798'); -- error CREATE TABLESPACE ENC_TS_KEY LOCATION '@testtablespace@' with (encryption = true, enckey = '123456'); -- error CREATE TABLESPACE ENC_TS_KEY LOCATION '@testtablespace@' with (encryption = true, enckey = 'qwertyui'); -- error CREATE TABLESPACE ENC_TS_KEY LOCATION '@testtablespace@' with (encryption = true, enckey = 'k1ngb2se'); -- create encryption table and build index CREATE TABLE TEST_ENC_KEY(ID INT, NAME VARCHAR(100)) TABLESPACE ENC_TS_KEY; CREATE INDEX INDEX_ENC ON TEST_ENC_KEY(ID); -- insert table data INSERT INTO TEST_ENC_KEY VALUES(GENERATE_SERIES(1, 10000), 'KINGBASE'); CHECKPOINT; -- select table test data correctness SELECT COUNT(*) FROM TEST_ENC_KEY; SELECT * FROM TEST_ENC_KEY LIMIT 5; -- update table test UPDATE TEST_ENC_KEY SET NAME = 'kingbase' WHERE ID = 1; -- delete table test DELETE FROM TEST_ENC_KEY; SELECT COUNT(*) FROM TEST_ENC_KEY; -- drop table test DROP TABLE TEST_ENC_KEY; -- alter tablespace test ALTER TABLESPACE ENC_TS_KEY SET (seq_page_cost = 1.0); ALTER TABLESPACE ENC_TS_KEY SET (encryption = false);
9.3.4.2. 表空间密钥保护¶
指定了用户密钥,但是sys_tablespace里面并不会显示出来,保护了用户密钥。
select * from sys_tablespace; -- drop tablespace test DROP TABLESPACE ENC_TS_KEY;
1.4. WAL日志加密¶
1.4.1. 关于WAL日志加密¶
WAL日志加密是对开启WAL日志加密功能的数据库产生的WAL日志进行加密。WAL日志加密在读取和写入WAL日志操作期间对WAL日志进行加密或解密。对于可能包含有敏感数据的WAL日志,全部加密,对不包含敏感数据的WAL日志,不进行加密。敏感数据的判断过程由数据库系统执行。目的是降低加密和解密WAL日志操作对性能的影响。包含加密WAL日志的WAL段文件可以被正常归档或备份,使得归档或备份的WAL日志得到加密保护。
1.4.2. WAL日志加密的限制¶
WAL日志加密,只能防止被加密的WAL日志泄露用户数据,无法防止从未保护的WAL日志中泄露用户数据。如,WAL日志加密功能从开启状态变为关闭状态后,有全页写行为产生,可能存在前面WAL日志中加密的内容出现在后面未加密的WAL日志中的情况,此种情况并非前面加密的WAL日志泄露数据,而是后面的WAL日志中记录了敏感数据所在数据页,导致敏感数据泄露。WAL日志加密开启后,请谨慎关闭。
1.4.3. WAL日志加密的系统参数¶
使用PGC_SIGHUP级别的GUC参数(wal_encryption)控制WAL日志加密功能的在线开启/关闭,默认为关闭。
1.4.4. WAL日志加密的使用¶
1.4.4.1. 开启WAL日志加密¶
语法
alter system set wal_encryption to true/on; select sys_reload_conf();
参数说明
true/on
表示开启WAL日志加密功能。
1.4.4.2. 关闭WAL日志加密¶
语法
alter system set wal_encryption to false/off; select sys_reload_conf();
参数说明
false/off
表示关闭WAL日志加密功能。
1.4.4.3. 查看数据库中WAL日志加密状态¶
语法
show wal_encryption;
结果说明
on
代表WAL日志加密功能处于开启状态。
off
代表WAL日志加密功能处于关闭状态。
1.4.4.4. WAL日志密钥管理¶
由于WAL日志密钥存储在主密钥文件中,因此WAL日志密钥的管理与主密钥文件息息相关。在一些无法直接获取WAL日志密钥的场景中,需要将主密钥文件拷贝到WAL日志解密环境中。
1.5. 透明存储加密与其他功能结合¶
1.5.1. 逻辑备份还原加密¶
数据库的备份文件通常是明文的或是二进制的形式存储,这样也是有数据泄露风险的,所以对备份文件加密也是维护数据库安全手段的一种。备份文件时需要用户指定备份的密钥,该密钥不会存储到备份文件中,这样就确保了密钥的安全,没有密钥,即使文件被盗取也没有办法获取到备份出来的真实数据。与此同时,数据库服务器会对备份文件的完整性进行校验,如果备份文件被人恶意破坏,那么还原数据的时候是会先检查备份文件的完整性,完整性校验不通过则无法还原数据到数据库中,防止了恶意篡改数据的操作。
通过数据库的备份工具可以实现对数据库的数据进行加密备份以及完整性校验。
1.5.1.1. 加密备份¶
通过 sys_dump 工具,指定-K参数设置密钥,即可对备份进行加密。 -F 指定备份格式,目前加密备份只支持c二进制格式。如下示例所示:
--首先需要在TEST库下创建一张表 create table test(id int); --创建一个待还原的数据库TEST1 create database test1; --备份 ./sys_dump -h 127.0.0.1 -p 8889 -U system -f enc.dmp -F c -K 123456 TEST --查看enc.dmp文件,里面是加密的,并且开头是保留了备份文件校验码 --正常还原 ./sys_restore -h 127.0.0.1 -p 8889 -U system -K 123456 -F c -d test1 enc.dmp --进入TEST1数据库查看数据表test成功被还原。
1.5.1.2. 完整性校验¶
如果对加密后的备份文件随意进行篡改,数据库将会识别错误,导致还原不成功。如下示例所示:
--非正常还原 cp enc.dmp enc_bak.dmp --然后修改enc_bak.dmp,使其原有内容发生变化 ./sys_restore -h 127.0.0.1 -p 8889 -U system -K 123456 -F c -d test1 enc_bak.dmp 报错:File SM3 HASH check failure 'enc_bak.dmp' failed.
1.5.2. 主备集群的透明存储加密¶
对于表和表空间加密。KingbaseES数据库集群支持表和表空间透明存储加密。如果主库使用表或表空间加密,相关信息会自动同步到备库中。主库如果修改加密密钥,集群会将密钥信息自动同步到备库中。主库开启钱包管理后,备机也会同步复制主库的钱包管理。
对于WAL日志加密。KingbaseES数据库集群支持WAL日志透明存储加密。主库数据同步到备库时,WAL日志文件中的加密数据仍然保持加密状态。即加密数据在传输过程中也保持加密状态。
1.5.3. 透明存储加密与接口的结合¶
透明存储加密对KingbaseES程序接口调用的操作没有任何影响,对应用程序透明。除了传输安全部分,透明存储操作对应用接口透明。
1.6. 使用透明存储加密的注意事项¶
1.6.1. 使用透明存储加密的安全建议¶
在数据库应用透明存储加密时,应遵循以下规则:
-
确定数据库中数据的敏感度,所需要的保密和风险级别。不敏感的数据不需要进行加密操作。
-
估算管理数据加密和密钥库的成本,以决定了密钥类型:基于数据的内置算法或者外置加密卡接口。
-
为加密数据设置单独的安全管理员。
-
备份加密数据库时选择加密备份。
1.6.2. 管理数据文件的安全性¶
及时删除一些加密前的文件,旧的文件可能存在明文数据。如果特权操作系统用户绕过数据库访问控制,可能直接获取数据信息。为避免这种项目,可以将加密的对象移动到新的表空间中,然后删除原来的表空间文件。
1.6.3. 透明存储加密和数据关闭操作¶
在关闭数据库前,应确保数据库开启加密状态。在数据库关闭操作期间,可能需要密钥文件。数据库关闭操作前会自动关闭密钥库管理。