本文介绍全密态数据库的功能支持情况。
功能限制
- 暂不支持明文列与密文列混合运算,例如: - SELECT * FROM table_name WHERE plaintext_col < ciphertext_col;。说明- 示例中 - table_name表示表名,- plaintext_col表示明文列,- ciphertext_col表示密文列。
- 全密态数据库不提供用户主密钥的生成和备份服务,您需要自行生成用户主密钥。一旦您丢失密钥,将无法再访问已有的数据。因此我们建议您妥善备份用户主密钥。 
注意事项
本文介绍的全密态数据库支持的功能,需确保RDS PostgreSQL实例内核版本大于等于20230830。
如需升级内核小版本,请参见升级内核小版本。
支持的数据类型和相关算子
全密态数据库定义并新增了以下数据类型,这些数据类型及其相应算子的范围内,支持SQL查询与事务,兼容标准SQL语法。
| 数据类型 | 说明 | 支持密文计算 | 
| enc_int4 | 加密后的整型数,对应的明文数据为4字节整型数。 | +、-、*、/、%、>、=、<、>=、<=、!= | 
| enc_int8 | 加密后的整型数,对应的明文数据为8字节整型数。 | |
| enc_float4 | 加密后的浮点数,对应的明文数据为4字节单精度浮点数。 | +、-、*、/、>、=、<、>=、<=、!= | 
| enc_float8 | 加密后的浮点数,对应的明文数据为8字节双精度浮点数。 | +、-、*、/、>、=、<、>=、<=、!=、pow | 
| enc_decimal | 加密后的十进制数,对应的明文数据类型为decimal。 | +、-、*、/、>、=、<、>=、<=、!=、pow、% | 
| enc_text | 加密后的可变长度字符串,对应的明文数据类型为text,编码为UTF-8。 | substr/substring、||、like、~~、!~~、>、=、<、>=、<=、!= | 
| enc_timestamp | 加密后的时间戳记,对应的明文数据类型为timestamp without time zone。 | extract year、>、=、<、>=、<=、!= | 
| det_type | 加密后的任意数据,相同的明文数据加密得到相同的密文数据。 | = | 
| rnd_type | 加密后的任意数据,相同的明文数据加密得到不同的密文数据。 | NA(仅支持密文存储,不支持密文计算) | 
| ore_int8 | 保序加密后的整型数,对应的明文数据为8字节整型数。不依赖可信硬件。 | >、=、<、>=、<=、!= | 
| ore_float8 | 保序加密后的浮点数,对应的明文数据为8字节双精度浮点数。不依赖可信硬件。 | >、=、<、>=、<=、!= | 
示例SQL:
CREATE TABLE example ( 
  account enc_int4,         -- 账户号码,对应明文的integer类型
  name enc_text,            -- 姓名,对应明文的text类型
  balance enc_float4,       -- 账户余额,对应明文的real类型
  credit enc_float4,        -- 信用额度,对应明文的real类型
  quota real,               -- 明文列
  address enc_text,         -- 地址,对应明文的text类型
  remark text,              -- 备注
  PRIMARY KEY (account)     -- 以account为主键
);查询子句
全密态数据库支持如下常见数据库查询所需的子句。
示例中table_name表示表名,col表示列名,ciphertext_col表示密文列。
| 子句 | 示例 | 
| WHERE |  | 
| ORDER BY | |
| GROUP BY |  | 
| HAVING | |
| INTERSECT |  | 
| EXCEPT | |
| UNION | |
| LIMIT | |
| OFFSET | 
索引加速
全密态数据库支持在加密列建立索引,以加速各类查询操作。例如:
CREATE INDEX IF NOT EXISTS name_index_btree on table_name USING btree (name);
CREATE INDEX IF NOT EXISTS name_index_hash on table_name USING hash (name);RDS PostgreSQL支持插件encdb_btree,能够提高全密态数据库密文索引相关操作的效率。更多信息,请参见加速密文索引(encdb_btree)。
多用户授权
在全密态数据库中,不同用户之间天然存在密文数据隔离,可以通过签发BCL(Behavior Control List)授权,实现不同用户之间数据融合计算。更多信息,请参见授权多用户访问。
明文-密文类型转换
全密态数据库支持修改列类型(明文类型修改为密文类型,密文类型修改为明文类型)。更多信息,请参见明文和密文的转换。
使用该功能前,当前用户需要先获得BCL授权。