Tabloları ALTER ifadeleriyle şifrelemek veya şifresini çözmek, her tablo için ayrı bir ifade gerektirir; bu durum büyük veritabanlarında pratik değildir. rds_tde_utils uzantısı, birden çok tabloyu ve dizini tek seferde — tek bir tabloyu veya veritabanındaki tüm tabloları — şifrelemenize veya şifresini çözmenize olanak tanır.
Ön koşullar
Başlamadan önce aşağıdakilerin sağlandığından emin olun:
RDS örneğiniz PostgreSQL 10 veya sonraki bir sürümde çalışıyor
RDS örneğiniz küçük motor sürümü 20221030 veya üstünü kullanıyor — bkz. ApsaraDB RDS for MySQL örneğinin küçük motor sürümünü güncelleme
Şeffaf Veri Şifreleme (TDE) etkinleştirildi — bkz. ApsaraDB RDS for PostgreSQL örneği için TDE'yi etkinleştirme ve TDE kullanma
Kullanım notları
Toplu şifreleme ve şifre çözme işlemleri eşzamanlı olarak yürütülür; çağrı, yalnızca tüm tablolar ve dizinler işlendikten sonra döner. Bir veritabanında çok sayıda tablo varsa bu işlemler uzun sürebilir. Dikkatli ilerleyin.
Uzantıyı yükleme ve kaldırma
Aşağıdaki ifadeleri yetkili bir hesap kullanarak çalıştırın.
Uzantıyı yükleyin:
CREATE EXTENSION rds_tde_utils;
Uzantıyı kaldırın:
DROP EXTENSION rds_tde_utils;
İşlev başvurusu
Bu uzantı sekiz işlev sağlar. Her işlev, iki yeniden yazma yönteminden birini kullanarak ya tek bir tablo üzerinde ya da tüm veritabanı kapsamında çalışır.
Yeniden yazma yöntemi seçimi
| Yöntem | Davranış |
|---|---|
| Lazy | Yeniden yazma mantığı LAZY VACUUM işlemine benzer. |
| Full | Yeniden yazma mantığı VACUUM FULL işlemine benzer. Yoğun saatlerde çalıştırmayın. |
Şifreleme işlevleri
| İşlev | Kapsam | Yöntem |
|---|---|---|
rds_tde_lazy_encrypt_table('table_name'::regclass) |
Tek tablo ve dizinleri | Lazy |
rds_tde_encrypt_table('table_name'::regclass) |
Tek tablo ve dizinleri | Full |
rds_tde_lazy_encrypt_database() |
Veritabanındaki tüm tablolar ve dizinler | Lazy |
rds_tde_encrypt_database() |
Veritabanındaki tüm tablolar ve dizinler | Full |
Şifre çözme işlevleri
| İşlev | Kapsam | Yöntem |
|---|---|---|
rds_tde_lazy_decrypt_table('table_name'::regclass) |
Tek tablo ve dizinleri | Lazy |
rds_tde_decrypt_table('table_name'::regclass) |
Tek tablo ve dizinleri | Full |
rds_tde_lazy_decrypt_database() |
Veritabanındaki tüm tablolar ve dizinler | Lazy |
rds_tde_decrypt_database() |
Veritabanındaki tüm tablolar ve dizinler | Full |
Örnekler
Test tablolarını oluşturma
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);
Tek bir tabloyu ve dizinlerini şifreleme
Çalışan iş yükleri üzerindeki etkiyi azaltmak için lazy yöntemini kullanın:
SELECT rds_tde_lazy_encrypt_table('table_a'::regclass);
Tam tablo yeniden yazması için yoğun saatler dışında full yöntemini kullanın:
SELECT rds_tde_encrypt_table('table_a'::regclass);
Veritabanındaki tüm tabloları ve dizinleri şifreleme
-- Lazy method (lower impact)
SELECT rds_tde_lazy_encrypt_database();
-- Full method (complete rewrite, run during off-peak hours)
SELECT rds_tde_encrypt_database();
Tek bir tablonun ve dizinlerinin şifresini çözme
-- Lazy method
SELECT rds_tde_lazy_decrypt_table('table_a'::regclass);
-- Full method (run during off-peak hours)
SELECT rds_tde_decrypt_table('table_a'::regclass);
Veritabanındaki tüm tabloların ve dizinlerin şifresini çözme
-- Lazy method (lower impact)
SELECT rds_tde_lazy_decrypt_database();
-- Full method (complete rewrite, run during off-peak hours)
SELECT rds_tde_decrypt_database();