本文介绍全加密功能在不同实例类型中的功能支持。

功能限制

  • 暂不支持将明文列修改为密文列,例如: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
SELECT col1, col2
    FROM table_name
    WHERE ciphertext_col1 > ciphertext_col2 
    ORDER BY col1;
ORDER BY
GROUP BY
SELECT col1, count(*)
    FROM table_name
    GROUP BY col1
    HAVING col1 IS NOT NULL;
HAVING
INTERSECT
SELECT ACCOUNT 
    FROM table_name
    WHERE col1 IS NOT NULL
EXCEPT
    SELECT ACCOUNT 
    FROM table_name
    WHERE ciphertext_col1 > ciphertext_col2 
LIMIT 1;
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仅加密方式不同的区别

不支持