VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

保序加密支持ORDER BY

功能描述

Vastbase支持OPE(保序加密)算法,这使得密态数据库中的表能够支持对密文列的排序操作。通过保序加密技术,即使是没有密钥的客户端用户也能根据密文列进行排序,且排序结果与有密文的客户端用户查到的排序结果保持一致,从而确保即使在不暴露密钥的情况下,排序操作也能得到正确的结果。

注意事项

  • OPE仅支持整型字段加解密,不支持其它数据类型的保序加密。
  • 密文列数据在进行(=、!=、<、<=、>、>=)运算仅支持btree索引。不支持其它类型的索引。
  • 不支持密文字段的in、like条件查询。
  • 未适配JDBC驱动,仅支持Libpq驱动。
  • order by排序结果正确的前提是密文列的CEK是OPE算法。如果密文列的CEK非OPE算法,排序结果将会是错误的。

操作步骤

1、以操作系统用户vastbase登录CN(数据库实例)所在主机。

2、执行以下命令以连接到密态数据库。

vsql -p 5432 vastbase -r -C

3、创建客户端主密钥CMK,创建CMK的语法请参考CREATE CLIENT MASTER KEY

CREATE CLIENT MASTER KEY ImgCMK WITH (KEY_STORE = localkms, KEY_PATH = "key_path_value2", ALGORITHM = RSA_2048);

4、创建列加密密钥CEK,并指定加密算法OPE,创建的CEK的语法请参考CREATE COLUMN ENCRYPTION KEY

CREATE COLUMN ENCRYPTION KEY ImgCEK WITH VALUES (CLIENT_MASTER_KEY = ImgCMK, ALGORITHM = OPE);

5、创建加密表,对指定列进行加密。

CREATE TABLE test1(id int encrypted with(column_encryption_key=ImgCEK,encryption_type=DETERMINISTIC),name text default 'testaaa',c3 text not null);

6、向加密表插入数据。

INSERT INTO test1 VALUES(1,'asdfghjkl','a'),(2,null,'b'),(null,'','c'),(3,'','c');

7、在有密钥的客户端查询表test1数据,并根据密文列对表数据进行排序。

SELECT * FROM test1;
SELECT * FROM test1 order by id;

返回结果为:

 id |   name    | c3
----+-----------+----
  1 | asdfghjkl | a
  2 |           | b
    |           | c
  3 |           | c
(4 rows)


 id |   name    | c3
----+-----------+----
  1 | asdfghjkl | a
  2 |           | b
  3 |           | c
    |           | c
(4 rows)

8、退出密态数据库,并连接到非密态数据库。

vsql -p 5432 vastbase -r 

9、在非密态数据库中,执行相同的查询语句将返回加密后的数据。

select * from test1;
select * from test1 order by id;

返回结果为:

           id           |   name    | c3
------------------------+-----------+----
       \x011aefabd73435 | asdfghjkl | a
 \x011aefabd73134313830 |           | b
                        |           | c
 \x011aefabd73635353336 |           | c
(4 rows)

           id           |   name    | c3
------------------------+-----------+----
       \x011aefabd73435 | asdfghjkl | a
 \x011aefabd73134313830 |           | b
 \x011aefabd73635353336 |           | c
                        |           | c
(4 rows)

在非密态数据库中,由于缺少解密密钥,加密列的数据将以加密后的形式显示。

10、退出非密态数据库,并连接到密态数据库,清理环境。

DROP TABLE test1;
DROP COLUMN ENCRYPTION KEY ImgCEK cascade;
DROP CLIENT MASTER KEY  ImgCMK cascade;