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