このトピックでは、常に機密のデータベースの機能について説明します。
前提条件
クラスターは、リビジョンバージョンが14.9.14.0以降のPolarDB for PostgreSQL 14を実行しています。
PolarDB for PostgreSQLクラスターのリビジョンバージョンを表示するには、次のステートメントを実行します。
PostgreSQL 14
select version();制限事項
ステートメントを実行して、プレーンテキスト列と暗号文列を同時に操作することはできません。 サンプル文:
SELECT * FROM table_name WHERE plaintext_col < ciphertext_col;説明上記のステートメントでは、
table_nameはテーブル名、plainte_colはプレーンテキスト列、ciphertext_colは暗号文列を示します。常時機密データベースは、マスター暗号化キー (MEK) を生成およびバックアップしません。 MEKを手動で作成する必要があります。 MEKを紛失すると、既存の暗号化データにアクセスできなくなります。 MEKを安全に保管することをお勧めします。
データ型と関連演算子
常に機密のデータベース機能は、次のデータ型を定義し、提供します。 データ型および関連する演算子は、SQLクエリおよびトランザクションをサポートし、標準SQL構文と互換性があります。
データ型 | 説明 | サポートされる演算子 |
enc_int4 | 平文の4バイト整数に対応する暗号化された整数。 | +, -, *, /, %, >, =, <, ≥, ≤, and != |
enc_int8 | 平文の8バイトの整数に対応する暗号化された整数。 | |
enc_float4 | 平文の4バイトの単精度浮動小数点数に対応する暗号化された浮動小数点数。 | +, -, *, /, >, =, <, ≥, ≤, and != |
enc_float8 | 平文の8バイトの倍精度浮動小数点数に対応する暗号化された浮動小数点数。 | +, -, *, /, >, =, <, ≥, ≤, !=, and pow |
enc_decimal | decimalデータ型の平文データに対応する暗号化された10進数。 | +, -, *, /, >, =, <, ≥, ≤, !=, pow, and % |
enc_text | TEXTデータ型の平文データに対応する可変長の暗号化文字列。 文字列はUTF-8でエンコードされます。 | substr/substring, ||, like, ~~, !~~, >, =, <, ≥, ≤, and != |
enc_timestamp | timestamp WITHOUT TIME ZONEデータ型のプレーンテキストデータに対応する暗号化されたタイムスタンプ。 | extract year, >, =, <, ≥, ≤, and! = |
det_type | 暗号化されたデータ。 同じ平文データは、同じ暗号文データに暗号化される。 | = |
rnd_type | 暗号化されたデータ。 同一の平文データは、異なる暗号文データに暗号化される。 | N/A (Ciphertext storage is supported, but ciphertext computing is not supported.) |
ore_int8 | 平文の8バイト整数に対応する順序保存暗号化整数。 暗号化は信頼できるハードウェアに依存しません。 | >, =, <, >=, <=, and! = |
ore_float8 | 平文の8バイトの倍精度浮動小数点数に対応する順序保存暗号化浮動小数点数。 暗号化は信頼できるハードウェアに依存しません。 | >, =, <, >=, <=, and! = |
サンプルSQL文:
CREATE TABLE example (
account enc_int4, -- The account that corresponds to plaintext data of the INTEGER type.
name enc_text, -- The name that corresponds to plaintext data of the TEXT type.
balance enc_float4, -- The account balance that corresponds to plaintext data of the REAL type.
credit enc_float4, -- The credit line of the account that corresponds to plaintext data of the REAL type.
quota real, -- The plaintext column.
address enc_text, -- The address that corresponds to plaintext data of the TEXT type.
remark text, -- The remarks.
PRIMARY KEY (account) -- Specifies that the account column is used as the primary key.
);クエリ句
常に機密性の高いデータベースは、一般的なデータベースクエリに必要な次の句をサポートします。
次の例では、table_nameはテーブル名、colは列名、ciphertext_colは暗号文列を示します。
条項 | 例 |
WHERE | |
ORDER BY | |
GROUP BY | |
持っている | |
INTERSECT | |
EXCEPT | |
UNION | |
リミット | |
オフセット |
インデックス
常に機密性の高いデータベースを使用すると、暗号化された列にインデックスを作成してクエリを高速化できます。 例:
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);マルチユーザー権限付与
常時機密データベースでは、異なるユーザーの暗号文データが自動的に分離されます。 暗号文データに対して統合コンピューティングを実行するには、ビヘイビアコントロールリスト (BCL) を発行して、暗号文データに対するアクセス許可を付与します。 詳細については、「マルチユーザーデータへのアクセス権限の付与」をご参照ください。
平文と暗号文の変換
常に機密のデータベースを使用すると、列の種類を変更できます。 プレーンテキストと暗号文の間で列タイプを変更できます。 詳細については、「平文と暗号文の間のデータ変換」をご参照ください。
平文と暗号文の間でデータを変換する前に、BCLを使用して変換する権限があることを確認してください。