このトピックでは、暗号化データベースの機能について説明します。
適用範囲
このトピックで説明する機能は、マイナーエンジンバージョンが 2.0.14.9.14.0 以降の PolarDB for PostgreSQL クラスター (PostgreSQL 14 を実行) で利用できます。
マイナーエンジンバージョンは、コンソールで表示するか、SHOW polardb_version; 文を実行して確認できます。ご利用のクラスターがバージョン要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードできます。
制限事項
プレーンテキスト列と暗号文列の両方を含む操作はサポートされていません。例:
SELECT * FROM table_name WHERE plaintext_col < ciphertext_col;。説明この例では、
table_nameはテーブル名、plaintext_colはプレーンテキスト列、ciphertext_colは暗号文列です。暗号化データベースは、カスタマーマスターキー (CMK) を生成またはバックアップするサービスを提供していません。お客様自身で CMK を生成する必要があります。キーを紛失した場合、既存のデータにアクセスできなくなります。そのため、CMK は安全な場所にバックアップしてください。
サポートされるデータ型と演算子
暗号化データベースでは、以下のデータ型が定義されています。これらのデータ型とその演算子は SQL クエリとトランザクションをサポートし、標準の SQL 構文と互換性があります。
データ型 | 説明 | サポートされる暗号文の計算 |
enc_int4 | 暗号化された整数。対応するプレーンテキストは 4 バイト整数です。 | +, -, *, /, %, >, =, <, >=, <=, != |
enc_int8 | 暗号化された整数。対応するプレーンテキストは 8 バイト整数です。 | |
enc_float4 | 暗号化された浮動小数点数。対応するプレーンテキストは 4 バイト単精度浮動小数点数です。 | +, -, *, /, >, =, <, >=, <=, != |
enc_float8 | 暗号化された浮動小数点数。対応するプレーンテキストは 8 バイト倍精度浮動小数点数です。 | +, -, *, /, >, =, <, >=, <=, !=, pow |
enc_decimal | 暗号化された 10 進数。対応するプレーンテキストは 10 進数です。 | +, -, *, /, >, =, <, >=, <=, !=, pow, % |
enc_text | 暗号化された可変長文字列。対応するプレーンテキストは UTF-8 エンコードのテキスト文字列です。 | substr/substring, ||, like, ~~, !~~, >, =, <, >=, <=, != |
enc_timestamp | 暗号化されたタイムスタンプ。対応するプレーンテキストはタイムゾーンなしのタイムスタンプです。 | extract year, >, =, <, >=, <=, != |
det_type | 任意の型の暗号化データ。同じプレーンテキストから同じ暗号文が生成されます。 | = |
rnd_type | 任意の型の暗号化データ。同じプレーンテキストから異なる暗号文が生成されます。 | N/A。ストレージのみがサポートされます。暗号文に対する計算はサポートされていません。 |
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);マルチユーザー権限付与
暗号化データベースでは、暗号文データはデフォルトでユーザー間で分離されています。Behavior Control List (BCL) を発行して他のユーザーにアクセス権を付与し、共有データでの共同計算を有効にすることができます。詳細については、「複数ユーザーへのアクセス権の付与」をご参照ください。
プレーンテキストと暗号文の型変換
列の型をプレーンテキストと暗号文の間で変換できます。詳細については、「プレーンテキストと暗号文の間の変換」をご参照ください。
この機能を使用するには、現在のユーザーが BCL 権限を持っている必要があります。