Jika fitur basis data selalu rahasia diaktifkan untuk instance ApsaraDB RDS for PostgreSQL Anda, Anda dapat mengonversi data dalam kolom antara teks biasa dan teks terenkripsi.
Prasyarat
Fitur basis data selalu rahasia harus diaktifkan untuk instance RDS. Untuk informasi lebih lanjut, lihat Aktifkan Fitur Basis Data Selalu Rahasia.
CatatanVersi mesin minor dari instance RDS harus 20230830 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui versi mesin minor, lihat Perbarui Versi Mesin Minor dari Instance ApsaraDB RDS for PostgreSQL.
Klien Anda harus sudah terhubung ke basis data menggunakan EncDB SDK setidaknya sekali. Untuk informasi lebih lanjut, lihat Gunakan Fitur Basis Data Selalu Rahasia dari Klien.
Anda harus diberi otorisasi dengan menggunakan daftar kontrol perilaku (BCL). Untuk informasi lebih lanjut, lihat Kelola Otorisasi.
Sintaksis
ALTER TABLE <table_name>
ALTER COLUMN <column_name> [SET DATA] TYPE <Tipe data setelah konversi>
USING <Fungsi konversi data>(<column_name>[, <keyname>]);Jika Anda mengonversi data dari teks terenkripsi ke teks biasa, cukup konfigurasikan parameter
column_name.Jika Anda mengonversi data dari teks biasa ke teks terenkripsi, Anda dapat mengonfigurasikan hanya parameter
column_nameatau mengonfigurasikan parametercolumn_namedankeynamesecara bersamaan.
Tabel 1 Fungsi Konversi Data
Data teks biasa | Data teks terenkripsi | Fungsi konversi teks biasa ke teks terenkripsi | Fungsi konversi teks terenkripsi ke teks biasa |
int4 | enc_int4 | encdb.enc_int4_encrypt | encdb.decrypt |
int8 | enc_int8 | encdb.enc_int8_encrypt | encdb.decrypt |
float4 | enc_float4 | encdb.enc_float4_encrypt | encdb.decrypt |
float8 | enc_float8 | encdb.enc_float8_encrypt | encdb.decrypt |
numeric | enc_decimal | encdb.enc_decimal_encrypt | encdb.decrypt |
text | enc_text | encdb.enc_text_encrypt | encdb.decrypt |
timestamp | enc_timestamp | encdb.enc_timestamp_encrypt | encdb.decrypt |
Contoh
Gunakan kunci dari keyname yang dibuat untuk mengonversi data dalam kolom dari teks biasa ke teks terenkripsi.
Buat keyname.
SELECT encdb.keyname_generate('<user_name>', '<database_name>', '<schema_name>', '<table_name>', '<column_name>');Buat kunci untuk keyname.
SELECT encdb.dek_generate('<keyname>'[, '<json_params>']);Parameter
json_paramsdalamencdb.dek_generatebersifat opsional. Anda dapat menentukan nilai berformat JSON untuk parameter ini. Tabel berikut menjelaskan pasangan kunci-nilai yang didukung.Kunci
Nilai
Contoh
algoritma
AES_128_GCM
AES_128_ECB
AES_128_CTR
AES_128_CBC
SM4_128_CBC
SM4_128_ECB
SM4_128_CTR
CLWW_ORE
CatatanEnkripsi pengungkapan urutan (ORE) diimplementasikan dan dioptimalkan. Untuk informasi lebih lanjut, lihat Practical Order-Revealing Encryption with Limited Leakage.
Algoritma enkripsi.
Nilai default: AES_128_GCM.
kebijakan
DEFAULT
Kebijakan enkripsi. Parameter ini dicadangkan. Nilainya tetap sebagai DEFAULT.
flags
RND
DET
Metode enkripsi. Nilai valid:
RND: enkripsi acak
DET: enkripsi deterministik
Nilai default: RND.
mekid
ID kunci enkripsi utama (MEK) pengguna
ID MEK yang digunakan untuk menghasilkan kunci enkripsi data (DEK).
Nilai default adalah ID MEK pengguna saat ini.
Gunakan kunci dari keyname untuk mengonversi data dalam kolom dari teks biasa ke teks terenkripsi. Sebagai contoh, Anda dapat mengonversi data dari tipe int4 ke tipe enc_int4.
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE enc_int4 USING encdb.enc_int4_encrypt(<column_name>, '<keyname>');
Konversikan data dalam kolom dari teks biasa ke teks terenkripsi menggunakan kunci default dari basis data saat ini.
CatatanKeyname dari kunci default yang digunakan untuk basis data saat ini adalah
|<User>|<Database>|.ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE enc_int4 USING encdb.enc_int4_encrypt(<column_name>);Konversikan data dalam kolom dari teks biasa ke teks terenkripsi.
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DATA TYPE int4 USING encdb.decrypt(<column_name>, '<keyname>');