ApsaraDB RDS for PostgreSQLインスタンスで常に機密データベース機能が有効になっている場合、列内のデータを平文と暗号文の間で変換できます。
前提条件
RDSインスタンスで常に機密データベース機能が有効になっています。 詳細については、「常に機密データベース機能の有効化」をご参照ください。
説明RDSインスタンスのマイナーエンジンバージョンが20230830以降です。 マイナーエンジンバージョンの更新方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのマイナーエンジンバージョンの更新」をご参照ください。
クライアントは、少なくとも1回はEncDB SDKを使用してデータベースに接続されています。 詳細については、「クライアントから常に機密データベース機能を使用する」をご参照ください。
動作制御リスト (BCL) を使用して許可されます。
構文
ALTER TABLE <table_name>
ALTER COLUMN <column_name> [SET DATA] TYPE <Data type after conversion>
USING <Data conversion function>(<column_name>[, <keyname>]);
データを暗号文から平文に変換する場合は、
column_name
パラメーターのみを設定する必要があります。データを平文から暗号文に変換する場合は、
column_name
パラメーターのみを設定できます。column_name
パラメーターとkeyname
パラメーターを同時に設定することもできます。
表1データ変換関数
平文データ | 暗号文データ | 平文から暗号文への変換関数 | 暗号化テキストから平文への変換関数 |
int4 | enc_int4 | encdb.enc_int4_encrypt | encdb.de crypt |
int8 | enc_int8 | encdb.enc_int8_encrypt | encdb.de crypt |
float4 | enc_float4 | encdb.enc_float4_encrypt | encdb.de crypt |
float8 | enc_float8 | encdb.enc_float8_encrypt | encdb.de crypt |
numeric | enc_decimal | encdb.enc_decimal_encrypt | encdb.de crypt |
text | enc_text | encdb.enc_text_encrypt | encdb.de crypt |
timestamp | enc_timestamp | encdb.enc_timestamp_encrypt | encdb.de crypt |
例
構築されたキー名のキーを使用して、列内のデータを平文から暗号文に変換します。
キー名を作成します。
SELECT encdb.keyname_generate('<user_name>', '<database_name>', '<schema_name>', '<table_name>', '<column_name>');
keynameのキーを生成します。
SELECT encdb.dek_generate('<keyname>'[, '<json_params>']);
encdb.de k_generate
のjson_params
パラメーターはオプションです。 このパラメーターにはJSON形式の値を指定できます。 次の表に、サポートされているキーと値のペアを示します。キー
値
例
アルゴリズム
AES_128_GCM
AES_128_ECB
AES_128_CTR
AES_128_CBC
SM4_128_CBC
SM4_128_ECB
SM4_128_CTR
CLWW_ORE
説明注文を明らかにする暗号化 (ORE) が実装され、最適化される。 詳細については、「実用的な注文-限られた漏れによる暗号化の公開」をご参照ください。
暗号化アルゴリズム。
デフォルト値: AES_128_GCM。
policy
DEFAULT
暗号化ポリシーです。 パラメーターは予約されています。 値はDEFAULTとして固定されています。
フラグ
RND
DET
暗号化方法。 有効な値:
RND: ランダム暗号化
DET: 決定論的暗号化
デフォルト値: RND
mekid
ユーザーのマスター暗号化キー (MEK) ID
データ暗号化キー (DEK) の生成に使用されるMEKのID。
デフォルト値は、現在のユーザーのMEK IDです。
keynameのキーを使用して、列内のデータを平文から暗号文に変換します。 たとえば、データをint4型からenc_int4型に変換できます。
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE enc_int4 USING encdb.enc_int4_encrypt(<column_name>, '<keyname>');
現在のデータベースのデフォルトキーを使用して、列のデータを平文から暗号文に変換します。
説明現在のデータベースで使用されているデフォルトキーのキー名は、
|<User >|< database> |
です。ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE enc_int4 USING encdb.enc_int4_encrypt(<column_name>);
列のデータを平文から暗号文に変換します。
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE int4 USING encdb.decrypt(<column_name>, '<keyname>');