ALTER 文を用いたテーブルの暗号化または復号には、対象テーブルごとに個別の文が必要であり、大規模データベースでは実用的ではありません。rds_tde_utils 拡張を使用すると、単一のテーブルまたはデータベース内のすべてのテーブルを一度に暗号化または復号できます。また、関連するインデックスも同時に処理されます。
前提条件
開始する前に、以下の点を確認してください。
RDS インスタンスが PostgreSQL 10 以降を実行していること
RDS インスタンスのマイナーエンジンバージョンが 20221030 以降であること — 詳細については、「ApsaraDB RDS for MySQL インスタンスのマイナーエンジンバージョンを更新する」をご参照ください。
透過的データ暗号化(TDE)が有効化されていること — 詳細については、「ApsaraDB RDS for PostgreSQL インスタンスで TDE を有効化し、TDE を使用する」をご参照ください。
使用上の注意事項
一括暗号化および復号操作は同期的に実行されます。すべてのテーブルおよびインデックスの処理が完了した後にのみ呼び出しが戻ります。データベース内に多数のテーブルが存在する場合、これらの操作には長時間を要する可能性があります。実行にあたっては十分にご注意ください。
拡張のインストールおよび削除
特権アカウントを使用して、以下の文を実行します。
拡張のインストール:
CREATE EXTENSION rds_tde_utils;拡張の削除:
DROP EXTENSION rds_tde_utils;関数リファレンス
この拡張は 8 つの関数を提供します。各関数は、単一テーブルまたはデータベース全体のいずれかを対象とし、2 種類の書き換えメソッドのうちいずれかを用いて動作します。
書き換えメソッドの選択
| メソッド | 動作 |
|---|---|
| Lazy | 書き換えロジックは LAZY VACUUM と同様です。 |
| Full | 書き換えロジックは VACUUM FULL と同様です。ピーク時間帯には実行しないでください。 |
暗号化関数
| 関数 | 対象範囲 | メソッド |
|---|---|---|
rds_tde_lazy_encrypt_table('table_name'::regclass) | 単一テーブルおよびそのインデックス | Lazy |
rds_tde_encrypt_table('table_name'::regclass) | 単一テーブルおよびそのインデックス | Full |
rds_tde_lazy_encrypt_database() | データベース内のすべてのテーブルおよびインデックス | Lazy |
rds_tde_encrypt_database() | データベース内のすべてのテーブルおよびインデックス | Full |
復号関数
| 関数 | 対象範囲 | メソッド |
|---|---|---|
rds_tde_lazy_decrypt_table('table_name'::regclass) | 単一テーブルおよびそのインデックス | Lazy |
rds_tde_decrypt_table('table_name'::regclass) | 単一テーブルおよびそのインデックス | Full |
rds_tde_lazy_decrypt_database() | データベース内のすべてのテーブルおよびインデックス | Lazy |
rds_tde_decrypt_database() | データベース内のすべてのテーブルおよびインデックス | Full |
例
テストテーブルの作成
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);単一テーブルおよびそのインデックスの暗号化
実行中のワークロードへの影響を抑えるため、Lazy メソッドを使用します。
SELECT rds_tde_lazy_encrypt_table('table_a'::regclass);完全なテーブル書き換えを実行する場合は、非ピーク時間帯に Full メソッドを使用します。
SELECT rds_tde_encrypt_table('table_a'::regclass);データベース内のすべてのテーブルおよびインデックスの暗号化
-- Lazy メソッド(影響が小さい)
SELECT rds_tde_lazy_encrypt_database();
-- Full メソッド(完全な書き換え。非ピーク時間帯に実行)
SELECT rds_tde_encrypt_database();単一テーブルおよびそのインデックスの復号
-- Lazy メソッド
SELECT rds_tde_lazy_decrypt_table('table_a'::regclass);
-- Full メソッド(非ピーク時間帯に実行)
SELECT rds_tde_decrypt_table('table_a'::regclass);データベース内のすべてのテーブルおよびインデックスの復号
-- Lazy メソッド(影響が小さい)
SELECT rds_tde_lazy_decrypt_database();
-- Full メソッド(完全な書き換え。非ピーク時間帯に実行)
SELECT rds_tde_decrypt_database();