本文介绍全加密功能在不同实例类型中的功能支持。
功能限制
- 暂不支持将明文列修改为密文列,例如:
ALTER TABLE table_name ALTER COLUMN plaintext_col SET DATA TYPE ciphertext_col;
。说明 示例中table_name
表示表名,plaintext_col
表示明文列,ciphertext_col
表示密文列。 - 暂不支持明文列与密文列混合运算,例如:
SELECT * FROM table_name WHERE plaintext_col < ciphertext_col;
。 - 全加密功能不提供用户主密钥的生成和备份服务,您需要自行生成用户主密钥。一旦您丢失密钥,将无法再访问已有的数据。因此我们建议您妥善备份用户主密钥。
Intel SGX 安全增强型规格功能支持
Intel SGX 安全增强型规格正在上海B 、上海L、北京I可用区公测中。具体规格清单请参见RDS PostgreSQL主实例规格列表,如需使用,请前往控制台购买。
数据类型和相关算子
在Intel SGX 安全增强型规格实例中,全加密功能定义并新增了7 种数据类型,这些数据类型及其相应算子的范围内,支持SQL查询与事务,兼容标准SQL语法。
数据类型 | 说明 | 支持计算 |
---|---|---|
enc_int4 | 加密后的整形数,对应的明文数据为4字节整形数。 | +、-、*、/、%、>、=、<、>=、<=、!= |
enc_int8 | 加密后的整形数,对应的明文数据为8字节整形数。 | |
enc_float4 | 加密后的浮点数,对应的明文数据为4字节单精度浮点数。 | +、-、*、/、>、=、<、>=、<=、!= |
enc_float8 | 加密后的浮点数,对应的明文数据为8字节双精度浮点数。 | +、-、*、/、>、=、<、>=、<=、!=、pow |
enc_decimal | 加密后的十进制数,对应的明文数据类型为decimal。 | +、-、*、/、>、=、<、>=、<=、!=、pow、% |
enc_text | 加密后的可变长度字符串,对应的明文数据类型为text。 | substr/substring、||、like、~~、!~~、>、=、<、>=、<=、!= |
enc_timestamp | 加密后的时间戳记,对应的明文数据类型为timestamp without time zone。 | extract year、>、=、<、>=、<=、!= |
示例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为主键
);
查询子句
在Intel SGX 安全增强型规格实例中,支持如下常见数据库查询所需的子句。
说明 示例中
table_name
表示表名,col
表示列名,ciphertext_col
表示密文列。
子句 | 示例 |
---|---|
WHERE |
|
ORDER BY | |
GROUP BY |
|
HAVING | |
INTERSECT |
|
EXCEPT | |
UNION | |
LIMIT | |
OFFSET |
索引
使用Intel SGX 安全增强型规格的数据库实例时,支持在加密列建立索引,以加速各类查询操作。例如:
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);
其他规格(非Intel SGX 安全增强型规格)功能支持
在非Intel SGX安全增强型实例中,全加密功能仅支持如下两种数据类型。对于这两种数据类型,全加密功能支持在客户端一侧对数据进行加密或解密,支持在数据库实例中对del_type类型的数据进行等值比较,不支持其它计算,不会在实例中对数据进行解密。
数据类型 | 说明 | 支持计算 |
---|---|---|
det_type | 使用确定性加密技术加密的数据,对应的明文数据类型为bytea。 | 等值比较(=) |
rnd_type | 使用随机加密技术加密的数据,对应的明文数据类型为bytea。
与数据类型det_type仅加密方式不同的区别 |
不支持 |