全部产品
Search
文档中心

ApsaraDB RDS:Enkripsi Kolom Sensitif Menggunakan Ekstensi rds_encdb

更新时间:Nov 10, 2025

ApsaraDB RDS for PostgreSQL menyediakan ekstensi rds_encdb untuk mengenkripsi kolom sensitif dalam set hasil kueri. Dengan mengonfigurasi izin akun database, Anda dapat membatasi akun untuk hanya melihat hasil kueri dalam bentuk teks terenkripsi saat menanyakan kolom sensitif.

Prasyarat

  • Instans RDS menjalankan PostgreSQL 16.

  • Instans RDS menjalankan versi mesin minor 20250228 atau yang lebih baru.

    Untuk menggunakan ekstensi rds_encdb pada instans RDS yang menjalankan versi mesin minor sebelum 20250228, perbarui versi mesin minor instans.

Skenario

Ekstensi rds_encdb cocok untuk skenario di mana Anda perlu mengenkripsi hasil kueri secara dinamis yang berisi data sensitif, seperti keuangan, perawatan kesehatan, dan e-commerce. Skenario umum meliputi:

  • Enkripsi Data Dinamis

  • Audit Kepatuhan

  • Berbagi Data Pihak Ketiga

Ekstensi ini memungkinkan enkripsi data oleh set hasil tanpa modifikasi kode aplikasi, serta menjaga keseimbangan antara efisiensi kueri dan privasi data.

Batasan

Ekstensi rds_encdb tidak mendukung kueri atau set hasil berikut:

  • Set hasil kueri yang dikembalikan oleh fungsi.

  • Kueri non-SELECT seperti operasi kursor atau pernyataan yang telah disiapkan.

  • Kueri yang mencakup ekspresi tabel umum (CTE) atau klausa UNION.

Instal ekstensi rds_encdb

Penting

Hanya pengguna yang ditambahkan ke daftar putih yang dapat menginstal ekstensi rds_encdb dengan mengeksekusi pernyataan SQL. Sebelum melakukan langkah-langkah berikut untuk menginstal ekstensi, hubungi dukungan teknis untuk menambahkan akun Anda ke daftar putih.

  1. Buka halaman Parameters dari instans RDS Anda di Konsol. Atur Running Value dari parameter rds_encdb.enable_encryption menjadi on. Untuk informasi lebih lanjut, lihat Atur Parameter Instans.

  2. Gunakan akun istimewa untuk terhubung ke database dan jalankan pernyataan SQL berikut untuk menginstal ekstensi rds_encdb:

    CREATE EXTENSION rds_encdb;
    Catatan

    Anda dapat mengeksekusi SELECT * FROM pg_extension; untuk melihat ekstensi yang telah diinstal.

Konfigurasikan aturan enkripsi kolom

Ekstensi rds_encdb mencatat kolom terenkripsi dalam tabel metadata rds_encdb.encryption_rule. Untuk mengenkripsi kolom, Anda dapat mengonfigurasi aturan enkripsi untuk kolom tersebut dengan menyisipkan baris data ke tabel metadata. Setelah itu, hasil kueri untuk kolom terenkripsi dikembalikan dalam teks terenkripsi. Aturan enkripsi berlaku pada sesi saat ini dan sesi berikutnya setelah dikonfigurasi.

Tabel berikut menunjukkan skema tabel metadata rds_encdb.encryption_rule. Saat Anda menyisipkan data ke tabel untuk mengonfigurasi aturan enkripsi, pastikan data sesuai dengan skema.

Nama kolom

Tipe

Deskripsi

id

int

ID auto-increment yang digunakan sebagai kunci utama tabel.

rule_name

name

Nama aturan enkripsi kolom.

attrelid

regclass

Tabel yang berisi kolom untuk mana Anda ingin mengonfigurasi aturan enkripsi. Nilai parameter ini harus memenuhi kendala UNIK pada kolom-kolom berikut: rule_name, attrelid, dan attnum.

attnum

smallint

Nomor urutan kolom yang ingin Anda konfigurasi aturan enkripsinya di tabel yang ditentukan oleh attrelid.

Algoritma Enkripsi

Data dalam kolom dengan aturan enkripsi yang dikonfigurasi dienkripsi menggunakan algoritma AES_256_GCM.

Contoh

  1. Buat tabel uji dan sisipkan data sampel ke tabel.

    CREATE TABLE test(a text,b text,c text);
    
    INSERT INTO test VALUES ('foo','bar','hello world');
  2. Kueri data dalam tabel uji.

    SELECT * FROM test;

    Hasil berikut dalam teks biasa dikembalikan:

      a  |  b  |      c
    -----+-----+-------------
     foo | bar | hello world
    (1 row)
  3. Konfigurasikan aturan enkripsi kolom dengan menyisipkan dua baris ke tabel metadata rds_encdb.encryption_rule. Dalam contoh ini, aturan yang dikonfigurasi menentukan bahwa kolom pertama dan kedua dalam tabel uji dienkripsi.

    INSERT INTO rds_encdb.encryption_rule 
    VALUES 
        (9, 'rule1', 'test', '1'), 
        (10, 'rule1', 'test', '2');
  4. Kueri data dalam tabel uji.

    SELECT * FROM test;

    Hasil berikut dikembalikan. Nilai-nilai dalam kolom pertama dan kedua tabel uji dikembalikan dalam teks terenkripsi.

                                    a                                 |                                b                                 |      c
    ------------------------------------------------------------------+------------------------------------------------------------------+-------------
     1yAZAAAACVyTxvBACK5JFw0w/ZU62Yt9btkv9bSN8TcJWOfXCiWVnCqnakSZCwI= | DSAZAAAACaSrnhi0usv3MiJsgRQKXA5xEArdALSdnFVjqD0nrd1s6ilShhw00EM= | hello world
    (1 row)
  5. (Opsional) Anda dapat melihat aturan enkripsi kolom yang dikonfigurasi dengan menanyakan tabel metadata rds_encdb.encryption_rule.

    SELECT * FROM rds_encdb.encryption_rule;

    Hasil berikut dikembalikan, yang menunjukkan aturan yang dikonfigurasi pada langkah-langkah sebelumnya.

     id | rule_name | attrelid | attnum
    ----+-----------+----------+--------
      9 | rule1     | test     |      1
     10 | rule1     | test     |      2
    (2 rows)

Ekstensi rds_encdb menyediakan tampilan bernama rds_encdb.rules untuk menampilkan aturan enkripsi dalam bentuk agregat berdasarkan nama aturan dan nama tabel. Anda dapat mengeksekusi pernyataan berikut untuk menanyakan aturan enkripsi yang dikonfigurasi menggunakan tampilan ini:

SELECT * FROM rds_encdb.rules;

Hasil berikut dikembalikan:

 rule_name | attrelid | attname_list
-----------+----------+--------------
 rule1     | test     | b,a
(1 row)

Konfigurasikan izin untuk melihat kolom terenkripsi

Anda dapat memberikan izin FULL ACCESS atau RESTRICTED ACCESS kepada akun. Secara default, akun diberikan izin RESTRICTED ACCESS.

Izin

Deskripsi

FULL ACCESS

Mengizinkan akun untuk melihat hasil kueri kolom terenkripsi dalam teks biasa.

RESTRICTED ACCESS

Mengizinkan akun untuk melihat hasil kueri kolom terenkripsi hanya dalam teks terenkripsi kecuali menggunakan driver JDBC untuk enkripsi kolom untuk mengakses kolom terenkripsi.

Berikan Izin kepada Akun untuk Melihat Kolom Terenkripsi

SELECT rds_encdb.setup_encryption_role('Nama akun', 'Izin', 'Waktu kadaluarsa');

Cabut Izin untuk Melihat Kolom Terenkripsi dari Akun

SELECT rds_encdb.remove_encryption_role('Nama akun');

Akun yang diberikan izin untuk melihat kolom terenkripsi dicatat dalam tabel metadata rds_encdb.setup_encryption_role. Tabel berikut menunjukkan skema tabel metadata:

Nama kolom

Tipe

Deskripsi

role

regrole

Kunci utama tabel, yaitu nama akun yang diberikan izin.

role_type

char

Izin yang diberikan kepada akun:

  • r: RESTRICTED ACCESS.

  • f: FULL ACCESS.

salt

text

Kunci yang dibuat secara acak untuk akun. Jika Anda menggunakan EncJDBC untuk mengakses kolom terenkripsi, kunci ini secara otomatis dibuat oleh klien setelah koneksi dibuat.

expire_time

timestamptz

Waktu kadaluarsa izin yang diberikan kepada akun. Izin secara otomatis diatur ke RESTRICTED ACCESS setelah izin asli kadaluarsa.

Format waktu kadaluarsa adalah sebagai berikut: YYYY-MM-DD HH:MM:SS.ssssss+/-TZ.

Contoh

  1. Berikan izin FULL ACCESS kepada akun bernama test_user.

    SELECT rds_encdb.setup_encryption_role('test_user','FULL ACCESS',now());
  2. Lihat akun yang diberikan izin untuk melihat kolom terenkripsi.

    SELECT * FROM rds_encdb.encryption_role_auth;

    Hasil berikut dikembalikan:

       role    | role_type | salt |          expire_time
    -----------+-----------+------+-------------------------------
     rds_test | f         |      | 2025-02-21 06:01:02.509447+00
    (1 row)