このトピックでは、さまざまなインスタンスタイプでサポートされている完全暗号化データベース機能の機能について説明します。
制限事項
ステートメントを実行して、プレーンテキスト列と暗号文列の両方に対して同時に操作を実行することはできません。 例:
SELECT * FROM table_name WHERE plaintext_col < ciphertext_col;
説明上記のステートメントでは、
table_name
はテーブル名、plainte_col
はプレーンテキスト列、ciphertext_col
は暗号文列を示します。完全暗号化データベース機能は、マスター暗号化キー (MEK) の生成とバックアップには使用できません。 MEKを手動で作成する必要があります。 MEKを紛失すると、既存の暗号化データにアクセスできなくなります。 MEKをバックアップすることをお勧めします。
使用上の注意
完全暗号化データベース機能を使用するには、ApsaraDB RDS for PostgreSQLインスタンスのマイナーエンジンバージョンが20230830以降であることを確認する必要があります。
RDSインスタンスのマイナーエンジンバージョンを更新する方法の詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
サポートされるデータ型と関連演算子
完全暗号化データベース機能は、次のデータ型を定義および提供します。 データ型および関連する演算子は、SQLクエリおよびトランザクションをサポートし、標準SQL構文と互換性があります。
データ型 | 説明 | サポートされる演算子 |
enc_int4 | 平文の4バイト整数に対応する暗号化された整数。 | + 、-、* 、/、% 、> 、=、<、≥ 、≤ 、および! = |
enc_int8 | 平文の8バイトの整数に対応する暗号化された整数。 | |
enc_float4 | 平文の4バイトの単精度浮動小数点数に対応する暗号化された浮動小数点数。 | + 、-、* 、/、> 、=、<、≥ 、≤ 、および! = |
enc_float8 | 平文の8バイトの倍精度浮動小数点数に対応する暗号化された浮動小数点数。 | +, -, *, /, >, =, <, ≥, ≤, ! =、およびpow |
enc_decimal | decimalデータ型の平文データに対応する暗号化された10進数。 | +, -, *, /, >, =, <, ≥, ≤, ! =、pow、および % |
enc_text | TEXTデータ型の平文データに対応する可変長の暗号化文字列。 文字列はUTF-8でエンコードされます。 | substr/substring, ||, like, ~~, !~~, >, =, <, ≥, ≤, and! = |
enc_timestamp | timestamp WITHOUT TIME ZONEデータ型のプレーンテキストデータに対応する暗号化されたタイムスタンプ。 | extract year, >, =, <, ≥, ≤, and! = |
det_type | 暗号化されたデータ。 同じ平文データは、同じ暗号文データに暗号化される。 | = |
rnd_type | 暗号化されたデータ。 同一の平文データは、異なる暗号文データに暗号化される。 | N/A (暗号文ストレージはサポートされていますが、暗号文コンピューティングはサポートされていません。) |
ore_int8 | 順番に暗号化され、平文の8バイトの整数に対応する整数。 暗号化は信頼できるハードウェアに依存しません。 | >, =, <, >=, <=, and! = |
ore_float8 | 順番に暗号化され、平文の8バイトの倍精度浮動小数点数に対応する浮動小数点数。 暗号化は信頼できるハードウェアに依存しません。 | >, =, <, >=, <=, and! = |
サンプルSQL文:
CREATE TABLEの例 (
account enc_int4, -- INTEGER型の平文データに対応するアカウント。
name enc_text, -- TEXT型の平文データに対応する名前。
balance enc_float4, -- REAL型の平文データに対応する口座残高。
credit enc_float4, -- REALタイプの平文データに対応するアカウントのクレジットライン。
quota real, -- 平文列。
address enc_text, -- TEXT型の平文データに対応するアドレス。
発言テキスト、-発言。
PRIMARY KEY (account) -- 主キーとして使用されるアカウント列。
);
クエリ句
完全暗号化データベース機能は、一般的なデータベースクエリに必要な次の句をサポートします。
次の例では、table_name
はテーブル名、col
は列名、ciphertext_col
は暗号文列を示します。
条項 | 例 |
WHERE |
|
ORDER BY | |
GROUP BY |
|
持っている | |
INTERSECT |
|
EXCEPT | |
UNION | |
リミット | |
オフセット |
インデックス
完全暗号化データベース機能を使用すると、暗号化列にインデックスを作成してクエリを高速化できます。 例:
CREATE INDEXが存在しない場合は、table_nameにname_index_btreeを使用してbtree (name);
CREATE INDEXが存在しない場合name_index_hash on table_name USING hash (name);
ApsaraDB RDS for PostgreSQLは、encdb_btree拡張機能をサポートしています。 これにより、完全暗号化データベースの暗号文インデックスに対する操作が容易になります。 詳細については、「encdb_btreeを使用して暗号文インデックスの操作を容易にする」をご参照ください。
マルチユーザー権限付与
完全に暗号化されたデータベースでは、さまざまなユーザーの暗号文データが自動的に分離されます。 暗号文データの統合コンピューティングを実行するには、ビヘイビアコントロールリスト (BCL) を発行して、暗号文データに対するアクセス許可を付与します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのマルチユーザーデータに対するアクセス許可の付与」をご参照ください。
平文と暗号文の変換
完全暗号化データベース機能を使用すると、列の種類を変更できます。 プレーンテキストと暗号文の間で列タイプを変更できます。 詳細については、「平文と暗号文の変換」をご参照ください。
平文と暗号文の間でデータを変換する前に、BCLを使用して許可されていることを確認してください。