All Products
Search
Document Center

ApsaraDB RDS:Driver enkripsi kolom (JDBC)

Last Updated:Jun 21, 2026

Gunakan driver enkripsi kolom (JDBC) Alibaba Cloud untuk mengakses data terenkripsi di database Anda dari aplikasi Java. Driver ini menggunakan kunci enkripsi utama (MEK) yang valid untuk mendekripsi ciphertext menjadi teks biasa secara otomatis dan transparan.

Prasyarat

  • Enkripsi kolom harus diaktifkan. Untuk informasi selengkapnya, lihat enkripsi kolom.

    Catatan

    Setelah Anda mengaktifkan enkripsi kolom, ekstensi rds_encdb akan dipasang secara default di database target. Anda dapat menjalankan pernyataan SQL berikut untuk memeriksa status ekstensi rds_encdb: SELECT EXISTS (SELECT * FROM pg_extension WHERE extname = 'rds_encdb');

  • Anda harus memiliki informasi koneksi ke database terenkripsi, termasuk hostname, port, nama database, username, dan password. Untuk mengetahui cara memperoleh titik akhir internal atau publik suatu instans, lihat Lihat dan ubah titik akhir serta nomor port.

  • Pengguna database harus memiliki ciphertext permission (JDBC decryption) untuk enkripsi kolom. Untuk informasi selengkapnya, lihat enkripsi kolom.

Catatan penggunaan

  • Simpan MEK secara aman.

  • Gunakan JDK 1.8 atau versi yang lebih baru.

Prosedur

Catatan

Topik ini menggunakan proyek Java berbasis Maven sebagai contoh.

Langkah 1: Konfigurasikan dependensi Maven

Tambahkan dependensi berikut ke file pom.xml proyek Maven Anda.

<dependencies>
   ...
  <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-cls-jdbc</artifactId>
    <version>1.0.10-1</version>
  </dependency>
   ...
</dependencies>

Langkah 2: Konfigurasikan URL dan MEK

Sebelum mengakses data terenkripsi dengan JDBC, konfigurasikan parameter seperti MEK dan URL.

Parameter

Contoh

Deskripsi

MEK

00112233445566778899aabbccddeeff

Kunci enkripsi utama yang ditentukan pengguna.

  • Anda dapat menghasilkan kunci menggunakan tool seperti openssl rand -hex 16, fungsi acak dalam bahasa pemrograman, atau memperolehnya dari Key Management Service (KMS) pihak ketiga.

  • Rentang nilai: string heksadesimal sepanjang 16 byte (32 karakter).

Peringatan

Demi keamanan, database tidak menyimpan, mengelola, menghasilkan, atau melakukan backup MEK Anda. Anda bertanggung jawab atas pembuatan dan pencadangan kunci tersebut. Kehilangan MEK akan mengakibatkan kehilangan permanen akses ke data terenkripsi Anda.

URL

jdbc:postgresql:encdb://%s:%s/%s

Untuk menggunakan driver enkripsi kolom, ubah awalan URL menjadi jdbc:postgresql:encdb://.

Konfigurasikan MEK

Anda dapat mengonfigurasi MEK dengan tiga cara. Jika Anda menerapkan lebih dari satu metode dalam koneksi JDBC, prioritasnya adalah sebagai berikut: konfigurasi Properties JDBC > konfigurasi File > konfigurasi URL.

Catatan
  • Pada metode konfigurasi URL, Anda dapat menggabungkan beberapa parameter menggunakan karakter ampersand (&).

  • Pada ketiga metode tersebut, MEK diproses secara lokal di client dan didistribusikan ke server secara aman menggunakan enkripsi amplop, sehingga tidak terpapar.

Properties JDBC

JDBC standar memungkinkan Anda mengonfigurasi atribut kustom dalam objek Properties saat membuat koneksi. Contohnya:

// Siapkan informasi koneksi, seperti hostname, port, dbname, username, dan password.
// ...
String mek="****";
Properties props = new Properties();
props.setProperty("user", username);
props.setProperty("password", password);
props.setProperty("MEK", mek);
String dbUrl = String.format("jdbc:postgresql:encdb://%s:%s/%s", hostname, port, dbname);
Connection connection = DriverManager.getConnection(dbUrl, props);
// ... Mulai kueri ...
File

Anda dapat mengimpor parameter seperti MEK dari file konfigurasi. Untuk melakukannya, atur properti encJdbcConfigFile ke path file tersebut. Jika properti ini tidak diatur, driver akan menggunakan file encjdbc.conf secara default.

File konfigurasi berisi hal berikut:

MEK=****

Anda dapat menempatkan file konfigurasi di salah satu dari dua lokasi berikut:

  • Tempatkan file encjdbc.conf di direktori resources proyek Anda.

  • Tempatkan file tersebut di direktori root proyek, yaitu direktori runtime aplikasi.

Setelah MEK dikonfigurasi dalam file, tidak diperlukan kode tambahan. Contohnya:

// Siapkan informasi koneksi, seperti hostname, port, dbname, username, dan password.
// ...
String dbUrl = String.format("jdbc:postgresql:encdb://%s:%s/%s", hostname, port, dbname);
Connection connection = DriverManager.getConnection(dbUrl, username, password);
// ... Mulai kueri ...
URL

Anda dapat menyematkan parameter seperti MEK dan ENC_ALGO di dalam URL. Contohnya:

// Siapkan informasi koneksi, seperti hostname, port, dbname, username, dan password.
// ...
String mek="****";
String dbUrl = String.format("jdbc:postgresql:encdb://%s:%s/%s?MEK=%s", hostname, port, dbname, mek);
Connection connection = DriverManager.getConnection(dbUrl, username, password);
// ... Mulai kueri ...

Contoh kode

Kode berikut menunjukkan contoh lengkap konfigurasi MEK menggunakan konfigurasi Properties JDBC. Sebelum menjalankan kode ini, pastikan enkripsi kolom telah dikonfigurasi di database target.

package org.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class Main {
    public static void main(String[] args) throws SQLException {
        // Perbarui informasi koneksi berikut (hostname, port, dbname, username, password) sesuai dengan lingkungan aktual Anda.
        String hostname = "pgm-****.pg.rds.aliyuncs.com"; // Titik akhir instans. Ganti dengan nilai aktual Anda.
        String port = "5432"; // Port database. Ganti dengan nilai aktual Anda.
        String dbname = "testdb"; // Nama database. Ganti dengan nilai aktual Anda.
        String username = "user"; // Username database. Gunakan pengguna yang memiliki izin ciphertext (dekripsi JDBC).
        String password = "password"; // Password untuk pengguna database.
        
        // Ini adalah contoh kunci. Kami menyarankan menggunakan kunci yang lebih kuat untuk meningkatkan keamanan.
        String MEK = "00112233445566778899aabbccddeeff";
        
       // Buat properti koneksi database.
        Properties props = new Properties();
        props.setProperty("user", username);
        props.setProperty("password", password);
        props.setProperty("MEK", MEK);
        
        // Format URL koneksi database.
        String dbUrl = String.format("jdbc:postgresql:encdb://%s:%s/%s", hostname, port, dbname);
        
        // Dapatkan koneksi database menggunakan DriverManager.
        Connection connection = DriverManager.getConnection(dbUrl, props);
        
        // Jalankan kueri untuk mengambil data dari tabel uji.
        ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM test_table");
        while (rs.next()) {
            for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { // Indeks kolom dimulai dari 1.
                System.out.print(rs.getString(i) + "\t");
            }
            System.out.println(); // Baris baru.
        }
        
        // Tutup sumber daya.
        rs.close();  // Tutup set hasil.
        connection.close(); // Tutup koneksi.
    }
}