本文介紹全密態數據庫的功能支持情況。
功能限制
暫不支持明文列與密文列混合運算,例如:
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授權。