Mengenkripsi atau mendekripsi tabel dengan pernyataan ALTER memerlukan satu pernyataan terpisah untuk setiap tabel, yang menjadi tidak praktis untuk database besar. Ekstensi rds_tde_utils memungkinkan Anda mengenkripsi atau mendekripsi beberapa tabel dan indeks sekaligus—baik satu tabel tunggal maupun seluruh tabel dalam suatu database.
Prasyarat
Sebelum memulai, pastikan bahwa:
Instans RDS Anda menjalankan PostgreSQL 10 atau versi yang lebih baru.
Instans RDS Anda menggunakan versi mesin minor 20221030 atau yang lebih baru—lihat Perbarui versi mesin minor instans ApsaraDB RDS for MySQL.
Transparent Data Encryption (TDE) telah diaktifkan—lihat Aktifkan TDE untuk instans ApsaraDB RDS for PostgreSQL dan gunakan TDE.
Catatan penggunaan
Operasi enkripsi dan dekripsi batch berjalan secara sinkron—panggilan hanya akan mengembalikan hasil setelah semua tabel dan indeks diproses. Jika database berisi jumlah tabel yang besar, operasi ini dapat memakan waktu lama. Lakukan dengan hati-hati.
Instalasi dan penghapusan ekstensi
Jalankan pernyataan berikut menggunakan Akun istimewa.
Instal ekstensi:
CREATE EXTENSION rds_tde_utils;Hapus ekstensi:
DROP EXTENSION rds_tde_utils;Referensi fungsi
Ekstensi ini menyediakan delapan fungsi. Setiap fungsi beroperasi pada satu tabel atau seluruh database, menggunakan salah satu dari dua metode rewrite.
Pilih metode rewrite
| Metode | Perilaku |
|---|---|
| Lazy | Logika rewrite mirip dengan LAZY VACUUM. |
| Full | Logika rewrite mirip dengan VACUUM FULL. Jangan jalankan selama jam sibuk. |
Fungsi enkripsi
| Fungsi | Ruang lingkup | Metode |
|---|---|---|
rds_tde_lazy_encrypt_table('table_name'::regclass) | Satu tabel dan indeksnya | Lazy |
rds_tde_encrypt_table('table_name'::regclass) | Satu tabel dan indeksnya | Full |
rds_tde_lazy_encrypt_database() | Semua tabel dan indeks dalam database | Lazy |
rds_tde_encrypt_database() | Semua tabel dan indeks dalam database | Full |
Fungsi dekripsi
| Fungsi | Ruang lingkup | Metode |
|---|---|---|
rds_tde_lazy_decrypt_table('table_name'::regclass) | Satu tabel dan indeksnya | Lazy |
rds_tde_decrypt_table('table_name'::regclass) | Satu tabel dan indeksnya | Full |
rds_tde_lazy_decrypt_database() | Semua tabel dan indeks dalam database | Lazy |
rds_tde_decrypt_database() | Semua tabel dan indeks dalam database | Full |
Contoh
Siapkan tabel uji
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);Enkripsi satu tabel dan indeksnya
Gunakan metode lazy untuk mengurangi dampak pada beban kerja yang sedang berjalan:
SELECT rds_tde_lazy_encrypt_table('table_a'::regclass);Gunakan metode full selama jam sepi untuk melakukan rewrite lengkap pada tabel:
SELECT rds_tde_encrypt_table('table_a'::regclass);Enkripsi semua tabel dan indeks dalam database
-- Metode lazy (dampak lebih rendah)
SELECT rds_tde_lazy_encrypt_database();
-- Metode full (rewrite lengkap, jalankan selama jam sepi)
SELECT rds_tde_encrypt_database();Dekripsi satu tabel dan indeksnya
-- Metode lazy
SELECT rds_tde_lazy_decrypt_table('table_a'::regclass);
-- Metode full (jalankan selama jam sepi)
SELECT rds_tde_decrypt_table('table_a'::regclass);Dekripsi semua tabel dan indeks dalam database
-- Metode lazy (dampak lebih rendah)
SELECT rds_tde_lazy_decrypt_database();
-- Metode full (rewrite lengkap, jalankan selama jam sepi)
SELECT rds_tde_decrypt_database();