透過的データ暗号化 (TDE) では、ALTERステートメントを使用して、テーブルとインデックスを暗号化および復号します。 暗号化と復号化を簡素化するために、ApsaraDB RDS for PostgreSQLは、一度に複数のデータレコードを暗号化および復号化するためのrds_tde_utils拡張機能を提供しています。
前提条件
ApsaraDB RDS for PostgreSQLインスタンスは、次の要件を満たしています。
- RDSインスタンスのメジャーバージョンはPostgreSQL 10以降です。
- RDSインスタンスのマイナーエンジンバージョンが20221030以降です。 説明 RDSインスタンスのマイナーエンジンバージョンを更新する方法の詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
- TDEは有効です。 詳細については、「TDEの設定」をご参照ください。
使用上の注意
一度に複数のデータレコードを暗号化または復号化するステートメントを実行した場合、結果はすべてのデータレコードが暗号化または復号化された後にのみ返されます。 データベース内に多数のテーブルが存在する場合、暗号化または復号化が完了するまでに時間がかかる。 注意して進めてください。
拡張機能の作成または削除
説明 このセクションで提供されているステートメントを実行するには、特権アカウントを使用することを推奨します。
- エクステンションを作成します。
拡張の作成rds_tde_utils;
- 拡張子を削除します。
ドロップ延長rds_tde_utils;
例
- テストデータを作成します。
CREATE TABLE table_a(id int); CREATE INDEX index_a1 ON table_a(id); CREATE INDEX index_a2 ON table_a USING hash(id); CREATE TABLE table_b(id int); CREATE INDEX index_b1 ON table_b(id); CREATE INDEX index_b2 ON table_b USING hash(id);
- 一度に複数のデータレコードを暗号化します。 説明暗号化プロセスは、テーブルを書き換える。
rds_tde_lazy_encrypt_table
またはrds_tde_encrypt_table
関数を呼び出して、テーブルを暗号化します。 次のリストに、関数の書き換えロジックを示します。rds_tde_lazy_encrypt_table
関数の書き換えロジックは、LAZY VACUUMと同様です。rds_tde_encrypt_table
関数の書き換えロジックは、VACUUM FULLと同様です。 ピーク時にはデータを暗号化しないことを推奨します。
- table_aという名前のテーブルとそのインデックス (index_a1およびindex_a2) を一度に暗号化します。
SELECT rds_tde_lazy_encrypt_table('table_a'::regclass);
SELECT rds_tde_encrypt_table('table_a'::regclass);
- データベース内のすべてのテーブル (table_aおよびtable_b) とテーブルのインデックスを一度に暗号化します。
SELECT rds_tde_lazy_encrypt_database();
SELECT rds_tde_encrypt_database();
- 一度に複数のデータレコードを復号化します。 説明解読プロセスはテーブルを書き換える。
rds_tde_lazy_decryp_table
またはrds_tde_decryp_table
関数を呼び出して、テーブルを復号します。 次のリストに、関数の書き換えロジックを示します。rds_tde_lazy_decryp_table
関数の書き換えロジックは、LAZY VACUUMと同様です。rds_tde_decryp_table
関数の書き換えロジックは、VACUUM FULLと同様です。 ピーク時にはデータを復号化しないことを推奨します。
- table_aという名前のテーブルとそのインデックス (index_a1およびindex_a2) を一度に復号します。
SELECT rds_tde_lazy_decrypt_table('table_a'::regclass);
SELECT rds_tde_decrypt_table('table_a'::regclass);
- データベース内のすべてのテーブル (table_aおよびtable_b) とテーブルのインデックスを一度に復号します。
SELECT rds_tde_lazy_decrypt_database();
SELECT rds_tde_decrypt_database();