All Products
Search
Document Center

ApsaraDB RDS:Panduan klien

Last Updated:Jun 19, 2026

Panduan ini menjelaskan cara menghubungkan dan menggunakan Fully Encrypted Database dari aplikasi klien.

Prasyarat

  • Anda telah mengaktifkan Fully Encrypted Database. Untuk informasi selengkapnya, lihat Aktifkan Fully Encrypted Database.

  • Anda telah menentukan kolom mana yang berisi data sensitif. Untuk informasi selengkapnya, lihat Tentukan atau konversi data sensitif.

    Tabel uji yang digunakan dalam panduan ini

    Kolom price, miles, dan secret merupakan data sensitif.

    CREATE TABLE example (
        id      INTEGER,
        name    VARCHAR,
        price   enc_int4,
        miles   enc_float4,
        secret  enc_text,
        PRIMARY KEY (id)
    );
  • Dapatkan detail koneksi database: hostname, port, nama database, username, dan password. Untuk petunjuk cara menemukan titik akhir publik dan internal untuk instans Anda, lihat Lihat atau modifikasi titik akhir koneksi dan port.

  • Aplikasi yang dijelaskan dalam artikel ini dikembangkan dengan menggunakan Java. Pastikan Anda memiliki lingkungan pengembangan Java. Kami merekomendasikan agar Anda menggunakan Java versi 1.8 atau yang lebih baru, Maven versi 3.9.2, dan IntelliJ IDEA Community Edition 2022.3.2 sebagai tool pengembangan.

Catatan

Simpan master key (MEK) Anda secara aman.

Contoh klien

Fitur Fully Encrypted Database mengenkripsi data sensitif dalam hasil kueri. Untuk memungkinkan aplikasi Anda memproses data terenkripsi, hubungkan menggunakan salah satu metode akses klien berikut:

Metode akses

Deskripsi

Perubahan kode

Application

EncJDBC

Otomatis mendeteksi tipe data terenkripsi dan menangani enkripsi serta dekripsi.

(Direkomendasikan) Hampir tidak memerlukan perubahan pada kode logika bisnis Anda.

EncDB SDK

Anda harus memanggil fungsi enkripsi dan dekripsi dari EncDB SDK untuk memproses teks biasa atau ciphertext.

Diperlukan.

psql command-line tool

Terhubung langsung ke database untuk kueri. Hanya ciphertext untuk kolom terenkripsi yang ditampilkan.

Hanya untuk kueri. Tidak diperlukan modifikasi kode karena metode ini bukan untuk pengembangan aplikasi.

Visual interaction tools seperti Konsol DMS

EncJDBC

Unduh driver dan dependensi

  1. Unduh driver EncJDBC.

    EncJDBC bergantung pada driver PostgreSQL yang disediakan komunitas untuk bekerja.

    Versi minor RDS PostgreSQL

    Versi plugin sisi server

    Dependensi klien

    20230830 atau yang lebih baru

    1.1.13 atau yang lebih baru

    encjdbc-1.0.6.jar

  2. Konfigurasikan dependensi Maven.

    Catatan

    Panduan ini menggunakan proyek Maven sebagai contoh.

    1. Jalankan perintah berikut untuk menginstal paket dependensi EncJDBC ke repositori lokal Anda:

      mvn install:install-file -DgroupId=com.alibaba.encdb -DartifactId=<jar_name> -Dversion=<jar_version> -Dpackaging=jar -Dfile=<jar_filename>

      Contoh:

      mvn install:install-file -DgroupId=com.alibaba.encdb -DartifactId=encjdbc -Dversion=1.0.6 -Dpackaging=jar -Dfile=D:\encdb\libs\encjdbc-1.0.6.jar
      Catatan
      • Dalam contoh ini, paket dependensi EncDB berada di direktori D:\encdb\libs.

      • Contoh ini menggunakan Maven versi 3.9.2. Jika Anda mengalami error instalasi, tingkatkan versi Maven Anda dan coba lagi.

    2. Setelah menginstal dependensi EncJDBC di repositori lokal, Anda perlu menambahkan dependensi berikut ke file pom.xml proyek Maven Anda.

      <dependencies>
         ...
         <dependency>
            <groupId>com.alibaba.encdb</groupId>
            <artifactId>encjdbc</artifactId>
            <version>1.0.6</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
         <dependency>
           <groupId>org.bouncycastle</groupId>
           <artifactId>bcprov-jdk15on</artifactId>
           <version>1.62</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
         <dependency>
           <groupId>org.bouncycastle</groupId>
           <artifactId>bcpkix-jdk15on</artifactId>
           <version>1.62</version>
         </dependency>
         <dependency>
           <groupId>com.alibaba.fastjson2</groupId>
           <artifactId>fastjson2</artifactId>
           <version>2.0.2</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
         <dependency>
           <groupId>org.postgresql</groupId>
           <artifactId>postgresql</artifactId>
           <version>42.2.23</version>
         </dependency>
         <dependency>
           <groupId>com.google.guava</groupId>
           <artifactId>guava</artifactId>
           <version>24.1.1-jre</version>
         </dependency>
         <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid</artifactId>
           <version>1.2.4</version>
         </dependency>
         <dependency>
           <groupId>org.jgrapht</groupId>
           <artifactId>jgrapht-core</artifactId>
           <!-- jgrapht does not support java 1.8 since 1.5.0 -->
           <version>1.4.0</version>
        </dependency>
         ...
      </dependencies>

Contoh kueri klien

Peringatan

Kode yang ditampilkan dalam contoh ini hanya untuk tujuan demonstrasi. Jangan atur password atau mek dalam teks biasa di kode produksi Anda. Kami merekomendasikan agar Anda menggunakan metode lain, seperti file konfigurasi eksternal atau variabel lingkungan, untuk menangani nilai-nilai ini lalu mereferensikannya dalam kode Anda.

  • Konfigurasi URL

    Anda dapat menggunakan EncJDBC seperti JDBC lainnya. Namun, pertama-tama Anda perlu mengonfigurasi informasi berikut terkait keamanan data Anda di EncJDBC.

    // Siapkan detail koneksi Anda: hostname, port, nama database (dbname), username, dan password.
    // Untuk detail selengkapnya, lihat bagian parameter keamanan data.
    String mek=...;
    String encAlgo=...;
    String dbUrl = String.format("encjdbc:postgresql://%s:%s/%s?mek=%s&enc_algo=%s", hostname, port, dbname, mek, encAlgo);
    Class.forName("com.alibaba.encdb.encjdbc.EncDriver");
    Connection dbConnection = DriverManager.getConnection(dbUrl, username, password);
    // ... Jalankan kueri ...

    Parameter keamanan data

    Parameter

    Nilai contoh

    Deskripsi

    mek

    0x00112233445566778899aabbccddeeff

    Master key yang ditentukan pengguna (MEK).

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

    Nilainya harus berupa string heksadesimal 32 karakter.

    Peringatan

    Master key (MEK) adalah kredensial utama untuk mengakses data terenkripsi Anda. Untuk alasan keamanan, Fully Encrypted Database tidak menyimpan atau mengelola MEK Anda, juga tidak menyediakan layanan pembuatan atau backup. Anda bertanggung jawab untuk menghasilkan dan melakukan backup MEK secara aman. Jika Anda kehilangan kunci tersebut, Anda akan kehilangan akses permanen ke data Anda. Kami sangat menyarankan agar Anda melakukan backup MEK di lokasi yang aman.

    enc_algo

    SM4_128_CBC

    Algoritma enkripsi. Nilai yang valid:

    • Algoritma internasional:

      • AES_128_GCM

      • AES_128_CBC

      • AES_128_ECB

    • Algoritma kriptografi Tiongkok:

      • SM4_128_GCM

      • SM4_128_CBC (Default)

      • SM4_128_ECB

    Catatan
    • Algoritma enkripsi CTR tidak didukung.

    • Algoritma AES_128_ECB dan SM4_128_ECB kurang aman. Gunakan dengan hati-hati. Kami sangat menyarankan menggunakan algoritma yang lebih aman.

    enc_scheme

    RND

    Skema enkripsi. Nilai yang valid:

    • RND (Default): enkripsi acak.

    • DET: enkripsi deterministik.

    Catatan

    Saat enc_algo diatur ke AES_128_ECB atau SM4_128_ECB, parameter ini tidak berpengaruh.

    dek_gen_mode

    ENCLAVE

    Metode untuk menghasilkan kunci data (DEK). Nilai yang valid:

    • ENCLAVE (Default): Server database menghasilkan kunci data (DEK) di dalam enclave tepercaya.

    • LOCAL: Klien menghasilkan kunci data (DEK).

    stateless

    true

    Mode tanpa status untuk database terenkripsi. Nilai yang valid:

    • true (Default): MEK tidak kedaluwarsa saat koneksi ditutup.

    • false: MEK kedaluwarsa saat koneksi ditutup.

    Catatan
    • Dalam konfigurasi URL, Anda dapat menggabungkan beberapa parameter dengan &.

    • Parameter mek dan parameter lain diproses secara lokal di klien dan didistribusikan secara aman ke server menggunakan enkripsi amplop, memastikan bahwa mek tidak pernah bocor.

  • Contoh kode lengkap

    // Ganti hostname, port, nama database (dbname), username, dan password dengan detail instans Anda.
    String hostname = "hostname";
    String port = "port";
    String dbname = "db";
    String username = "user";
    String password = "password";
    String mek="00112233445566778899aabbccddeeff";  // Ini adalah contoh. Gunakan kunci yang lebih kompleks di produksi.
    String encAlgo="SM4_128_CBC";
    String dbUrl = String.format("encjdbc:postgresql://%s:%s/%s?mek=%s&enc_algo=%s", hostname, port, dbname, mek, encAlgo);
    Class.forName("com.alibaba.encdb.encjdbc.EncDriver");
    Connection dbConnection = DriverManager.getConnection(dbUrl, username, password);
    // buat tabel
    dbConnection.createStatement().executeUpdate("DROP TABLE IF EXISTS example");
    dbConnection.createStatement().executeUpdate("CREATE TABLE example (id INTEGER, name VARCHAR, price enc_int4, miles enc_float4, secret enc_text, PRIMARY KEY (id))");
    // masukkan data
    PreparedStatement stmt = dbConnection.prepareStatement("INSERT INTO example (id, name, price, miles, secret) VALUES(?,?,?,?,?)");
    int price = 1234;
    float miles = 12.34f;
    String secret = "aliyun";
    stmt.setInt(1, 1);
    stmt.setString(2, "name");
    stmt.setInt(3, price);
    stmt.setFloat(4, miles);
    stmt.setString(5, secret);
    stmt.execute();
    // periksa data teks biasa
    String sqlCmd = "SELECT * FROM example WHERE  price > ?";
    PreparedStatement stmt = dbConnection.prepareStatement(sqlCmd);
    stmt.setInt(1, 100);
    ResultSet rs = stmt.executeQuery();
    while (rs.next()){
        int id = rs.getInt(1);
        String name = rs.getString(2);
        int price = rs.getInt(3);
        float miles = rs.getFloat(4);
        String secret = rs.getString(5);
        System.out.println(id + ", " + name + ", " + price + ", " + miles + ", " + secret);  
    }

    Output contoh:

    1, name, 1234, 12.34, aliyun

Contoh kode EncJDBC di atas menunjukkan bahwa Anda hanya perlu memodifikasi pemuatan driver dan konfigurasi URL. Sisanya identik dengan akses database standar. Anda tidak perlu memodifikasi kode terkait bisnis apa pun.

EncDB SDK

Unduh driver dan dependensi

  1. Unduh driver EncDB SDK.

    EncDB SDK bergantung pada driver PostgreSQL yang disediakan komunitas.

    Versi minor RDS PostgreSQL

    Versi plugin sisi server

    Dependensi klien

    20230830 atau yang lebih baru

    1.1.13 atau yang lebih baru

    libencdb-1.2.12.jar

  2. Konfigurasikan dependensi Maven.

    Catatan

    Panduan ini menggunakan proyek Maven sebagai contoh.

    1. Jalankan perintah berikut untuk menginstal paket dependensi EncDB SDK ke repositori lokal Anda:

      mvn install:install-file -DgroupId=com.alibaba.encdb -DartifactId=<jar_name> -Dversion=<jar_version> -Dpackaging=jar -Dfile=<jar_filename>

      Contoh:

      mvn install:install-file -DgroupId=com.alibaba.encdb -DartifactId=libencdb -Dversion=1.2.12 -Dpackaging=jar -Dfile=D:\encdb\libs\libencdb-1.2.12.jar
      Catatan
      • Dalam contoh ini, paket dependensi EncDB berada di path D:\encdb\libs.

      • Contoh ini menggunakan Maven versi 3.9.2. Jika Anda mengalami error instalasi, tingkatkan versi Maven Anda dan coba lagi.

    2. Setelah menginstal dependensi EncDB SDK di repositori lokal Anda, Anda perlu menambahkan dependensi berikut ke file pom.xml proyek Maven Anda.

      <dependencies>
         ...
         <dependency>
            <groupId>com.alibaba.encdb</groupId>
            <artifactId>libencdb</artifactId>
            <version>1.2.12</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
         <dependency>
           <groupId>org.bouncycastle</groupId>
           <artifactId>bcprov-jdk15on</artifactId>
           <version>1.70</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
         <dependency>
           <groupId>org.bouncycastle</groupId>
           <artifactId>bcpkix-jdk15on</artifactId>
           <version>1.70</version>
         </dependency>
         <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
          </dependency>
         <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
         <dependency>
           <groupId>org.postgresql</groupId>
           <artifactId>postgresql</artifactId>
           <version>42.2.23</version>
         </dependency>
         <dependency>
           <groupId>com.google.guava</groupId>
           <artifactId>guava</artifactId>
           <version>31.1-jre</version>
         </dependency>
         <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
         </dependency>
         <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.4</version>
          </dependency>
         ...
      </dependencies>

Contoh kueri klien

Peringatan

Kode dalam contoh ini hanya untuk tujuan demonstrasi. Jangan atur password atau mek dalam teks biasa di kode produksi Anda. Sebagai gantinya, gunakan file konfigurasi eksternal atau variabel lingkungan dan referensikan dalam kode Anda.

  • Konfigurasi SDK

    Sebelum mengirim atau menerima ciphertext, Anda perlu menggunakan EncDB SDK untuk mengenkripsi dan mendekripsi data.

    EncDB SDK menyediakan antarmuka bagi Anda untuk mengonfigurasi parameter keamanan data saat menginisialisasi objek SDK. Biasanya, Anda hanya perlu mengonfigurasi master key (setMek) dan algoritma enkripsi yang diinginkan (setEncAlgo). Kami merekomendasikan agar Anda menggunakan konfigurasi default untuk semua parameter lainnya.

    // Siapkan detail koneksi Anda: hostname, port, nama database (dbname), username, dan password.
    // Buat koneksi database menggunakan versi JDBC apa pun.
    String dbUrl = String.format("jdbc:postgresql://%s:%s/%s?binaryTransfer=true", hostname, port, dbname);
    Class.forName("org.postgresql.Driver");
    Connection dbConnection = DriverManager.getConnection(dbUrl, username, password);
    // Inisialisasi SDK.
    String mek=...;
    Constants.EncAlgo encAlgo=...;
    EncdbSDK sdk = EncdbSDKBuilder.newInstance()
            .setDbConnection(dbConnection)
            .setMek(mek)
            .setEncAlgo(encAlgo)
            .build();
    Cryptor cryptor = sdk.getCryptor();
    // Panggil antarmuka enkripsi/dekripsi.
    // byte[] cipherBytes = cryptor.encrypt(...);
    // XXX value = cryptor.decryptXXX(...):
    // ... Jalankan kueri ...

    Parameter inisialisasi SDK

    Parameter

    Nilai contoh

    Deskripsi

    Mek

    0x00112233445566778899aabbccddeeff

    Master key yang ditentukan pengguna (MEK).

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

    Nilainya harus berupa string heksadesimal 32 karakter atau array biner 16 byte.

    Peringatan

    Master key (MEK) adalah kredensial utama untuk mengakses data terenkripsi Anda. Untuk alasan keamanan, Fully Encrypted Database tidak menyimpan atau mengelola MEK Anda, juga tidak menyediakan layanan pembuatan atau backup. Anda bertanggung jawab untuk menghasilkan dan melakukan backup MEK secara aman. Jika Anda kehilangan kunci tersebut, Anda akan kehilangan akses permanen ke data Anda. Kami sangat menyarankan agar Anda melakukan backup MEK di lokasi yang aman.

    EncAlgo

    SM4_128_CBC

    Algoritma enkripsi. Nilai yang valid:

    • Algoritma internasional:

      • AES_128_GCM

      • AES_128_CBC

      • AES_128_ECB

    • Algoritma kriptografi Tiongkok:

      • SM4_128_GCM

      • SM4_128_CBC (Default)

      • SM4_128_ECB

    Catatan
    • Algoritma enkripsi CTR tidak didukung.

    • Algoritma AES_128_ECB dan SM4_128_ECB kurang aman. Gunakan dengan hati-hati. Kami sangat menyarankan menggunakan algoritma yang lebih aman.

    EncScheme

    RND

    Skema enkripsi. Nilai yang valid:

    • RND (Default): enkripsi acak.

    • DET: enkripsi deterministik.

    Catatan

    Saat EncAlgo adalah AES_128_ECB atau SM4_128_ECB, parameter ini tidak berpengaruh.

    DekGenMode

    ENCLAVE

    Metode untuk menghasilkan kunci data (DEK). Nilai yang valid:

    • ENCLAVE (Default): Server database menghasilkan kunci data (DEK) di dalam enclave tepercaya.

    • LOCAL: Klien menghasilkan kunci data (DEK).

    SdkMode

    Default

    Mode SDK. Nilai yang valid:

    • Default: Mendukung semua tipe data ciphertext yang tersedia di edisi dasar dan edisi berakselerasi perangkat keras Fully Encrypted Database.

    Stateless

    true

    Mode tanpa status untuk database terenkripsi. Nilai yang valid:

    • true (Default): MEK tidak kedaluwarsa saat koneksi ditutup.

    • false: MEK kedaluwarsa saat koneksi ditutup.

    Catatan

    Parameter mek dan parameter lain diproses secara lokal di klien dan didistribusikan secara aman ke server menggunakan enkripsi amplop, memastikan bahwa mek tidak pernah bocor.

  • Contoh kode lengkap

    // Ganti hostname, port, nama database (dbname), username, dan password dengan detail instans Anda.
    String hostname = "hostname";
    String port = "port";
    String dbname = "db";
    String username = "user";
    String password = "password";
    // Buat koneksi database.
    String dbUrl = String.format("jdbc:postgresql://%s:%s/%s?binaryTransfer=true", hostname, port, dbname);
    Class.forName("org.postgresql.Driver");
    Connection dbConnection = DriverManager.getConnection(dbUrl, username, password);
    // Inisialisasi SDK.
    String mek="00112233445566778899aabbccddeeff";  // Ini adalah contoh. Gunakan kunci yang lebih kompleks di produksi.
    Constants.EncAlgo encAlgo=Constants.EncAlgo.SM4_128_CBC;
    EncdbSDK sdk = EncdbSDKBuilder.newInstance()
            .setDbConnection(dbConnection)
            .setMek(mek)
            .setEncAlgo(encAlgo)
            .build();
    Cryptor cryptor = sdk.getCryptor();
    // buat tabel
    dbConnection.createStatement().executeUpdate("DROP TABLE IF EXISTS example");
    dbConnection.createStatement().executeUpdate("CREATE TABLE example (id INTEGER, name VARCHAR, price enc_int4, miles enc_float4, secret enc_text, PRIMARY KEY (id))");
    // masukkan data
    PreparedStatement stmt = dbConnection.prepareStatement("INSERT INTO example (id, name, price, miles, secret) VALUES(?,?,?,?,?)");
    int price = 1234;
    float miles = 12.34f;
    String secret = "aliyun";
    stmt.setInt(1, 1);
    stmt.setString(2, "name");
    stmt.setBytes(3, cryptor.encrypt("example", "price", price));
    stmt.setBytes(4, cryptor.encrypt("example", "miles", miles));
    stmt.setBytes(5, cryptor.encrypt("example", "secret", secret));
    stmt.execute();
    // periksa data teks biasa
    String sqlCmd = "SELECT * FROM example WHERE  price > ?";
    stmt = dbConnection.prepareStatement(sqlCmd);
    stmt.setBytes(1, cryptor.encrypt("example", "price", 100));
    ResultSet rs = stmt.executeQuery();
    while (rs.next()) {
        int id = rs.getInt(1);
        String name = rs.getString(2);
        price = cryptor.decryptInt(rs.getBytes(3));
        miles = cryptor.decryptFloat(rs.getBytes(4));
        String text = cryptor.decryptString(rs.getBytes(5));
        System.out.println(id +", " + name + ", " + price + ", " + miles + ", " + text);
    }

    Output contoh:

    1, name, 1234, 12.34, aliyun

Referensi SDK

Ikhtisar modul SDK Java

EncDB SDK terutama terdiri dari modul fungsional Java berikut:

com.alibaba.encdb.crypto.EncdbSDKBuilder

Modul ini adalah kelas builder untuk EncDB SDK. Modul ini menyediakan API berikut:

// Membuat instance EncdbSDKBuilder baru.
EncdbSDKBuilder newInstance();
// (Wajib) Mengatur koneksi database untuk operasi manajemen kunci libencdb. Koneksi ini dapat terpisah dari koneksi yang digunakan untuk logika bisnis.
EncdbSDKBuilder setDbConnection(java.sql.Connection dbConnection);
// (Wajib) Mengatur master key. Ini dapat berupa objek byte[] 16-byte atau string heksadesimal 32 karakter.
EncdbSDKBuilder setMek(byte[] mek);
EncdbSDKBuilder setMek(String mekStr);
// (Opsional) Mengatur algoritma enkripsi. Opsi termasuk AES_128_GCM, AES_128_CBC, AES_128_ECB, SM4_128_CBC, SM4_128_ECB, dan SM4_128_GCM. Default adalah SM4_128_CBC.
EncdbSDKBuilder setEncAlgo(EncAlgo encAlgo);
// Setelah mengonfigurasi pengaturan di atas, metode ini membangun objek EncdbSDK.
EncdbSDK build();

com.alibaba.encdb.EncdbSDK

Modul ini menyediakan manajemen kunci tepercaya dan komunikasi aman end-to-end. Modul ini menyediakan API berikut:

// Mendapatkan objek Cryptor untuk operasi kriptografi.
Cryptor getCryptor();

com.alibaba.encdb.Cryptor

Modul ini menyediakan fungsi kriptografi. Modul ini menyediakan API berikut:

/**
 * @brief Antarmuka enkripsi
 *
 * @param schemaName nama skema, digunakan bersama dengan nama tabel dan nama kolom untuk mencari kunci enkripsi data dari koneksi database yang diberikan.
 *
 * @param tblName    nama tabel, digunakan bersama dengan nama kolom untuk mencari kunci enkripsi data dari koneksi database yang diberikan.
 *
 * @param colName    nama kolom, digunakan bersama dengan nama tabel. Untuk menggunakan kunci enkripsi data default, atur tblName = "default", colName="default"
 *
 * @param type       tipe encdb yang valid
 * @param val        nilai
 * @return           byte terenkripsi
 */
byte[] encrypt(String schemaName, String tblName, String colName, EncType type, byte[] val);
byte[] encrypt(String schemaName, String tblName, String colName, byte[] val);
byte[] encrypt(String tblName, String colName, EncType type, byte[] val);
byte[] encrypt(String tblName, String colName, byte[] val);
// untuk int
byte[] encrypt(String schemaName, String tblName, String colName, EncType type, int val);
byte[] encrypt(String schemaName, String tblName, String colName, int val);
byte[] encrypt(String tblName, String colName, EncType type, int val);
byte[] encrypt(String tblName, String colName, int val);
// untuk long
byte[] encrypt(String schemaName, String tblName, String colName, EncType type, long val);
byte[] encrypt(String schemaName, String tblName, String colName, long val);
byte[] encrypt(String tblName, String colName, EncType type, long val);
byte[] encrypt(String tblName, String colName, long val);
// untuk float
byte[] encrypt(String schemaName, String tblName, String colName, EncType type, float val);
byte[] encrypt(String schemaName, String tblName, String colName, float val);
byte[] encrypt(String tblName, String colName, EncType type, float val);
byte[] encrypt(String tblName, String colName, float val);
// untuk double
byte[] encrypt(String schemaName, String tblName, String colName, EncType type, double val);
byte[] encrypt(String schemaName, String tblName, String colName, double val);
byte[] encrypt(String tblName, String colName, EncType type, double val);
byte[] encrypt(String tblName, String colName, double val);
// untuk String
byte[] encrypt(String schemaName, String tblName, String colName, EncType type, String val);
byte[] encrypt(String schemaName, String tblName, String colName, String val);
byte[] encrypt(String tblName, String colName, EncType type, String val);
byte[] encrypt(String tblName, String colName, String val);
// untuk BigDecimal
byte[] encrypt(String schemaName, String tblName, String colName, EncType type, BigDecimal val);
byte[] encrypt(String schemaName, String tblName, String colName, BigDecimal val);
byte[] encrypt(String tblName, String colName, EncType type, BigDecimal val);
byte[] encrypt(String tblName, String colName, BigDecimal val);
// untuk Timestamp
byte[] encrypt(String schemaName, String tblName, String colName, EncType type, Timestamp val);
byte[] encrypt(String schemaName, String tblName, String colName, Timestamp val);
byte[] encrypt(String tblName, String colName, EncType type, Timestamp val);
byte[] encrypt(String tblName, String colName, Timestamp val);
/**
 * @brief Antarmuka dekripsi
 *
 * @param schemaName nama skema, digunakan bersama dengan nama tabel dan nama kolom untuk mencari kunci enkripsi data dari koneksi database yang diberikan.
 *
 * @param tblName    nama tabel, digunakan bersama dengan nama kolom untuk mencari kunci enkripsi data.
 *
 * @param colName    nama kolom, digunakan bersama dengan nama tabel. Untuk menggunakan kunci enkripsi data default,
 *                atur tblName = "default", colName="default"
 *
 * @param val        val dapat dalam format biner heksa atau byte bytea pg, misalnya \\x00621c14
 * @return           Nilai yang didekripsi dalam format biner heksa atau format tipe yang diberikan.
 */
byte[] decrypt(String schemaName, String tblName, String colName, byte[] val);
byte[] decrypt(String tblName, String colName, byte[] val);
byte[] decrypt(byte[] val);
// Antarmuka dekripsi untuk `int`
int decryptInt(byte[] val);
// Antarmuka dekripsi untuk `long`
long decryptLong(byte[] val);
// Antarmuka dekripsi untuk `float`
float decryptFloat(byte[] val);
// Antarmuka dekripsi untuk `double`
double decryptDouble(byte[] val);
// Antarmuka dekripsi untuk `String`
String decryptString(byte[] val);
// Antarmuka dekripsi untuk `BigDecimal`
BigDecimal decryptDecimal(byte[] val);
// Antarmuka dekripsi untuk `TimeStamp`
Timestamp decryptTimestamp(byte[] val);

psql CLI

Fully Encrypted Database mendukung kueri langsung dari command line, seperti menggunakan command line psql untuk menjalankan SELECT * FROM example;.

postgres=# \x
Expanded display is on.
postgres=# SELECT * FROM example;
-[ RECORD 1 ]-----------------------------------------------------------
id     | 1
name   | name
price  | \xac0900ecbd4efc9f36eaf1c17f1ef928a50c26c73d4ac35788f543a7dd0b2fc752459e
miles  | \x931900f561358e7a92086b69d3b423fe453466a7ec556387639699153bef078857f99c
secret | \x1d3900a4ffe264f4dc6d0138106869bc09387a500ce150501d60744f404e22a5d9aa62
postgres=#

Seperti yang Anda lihat, kolom id dan name berada dalam teks biasa, sedangkan kolom price, miles, dan secret berada dalam ciphertext. Data terenkripsi tidak dapat dilihat di server, yang memberikan perlindungan efektif terhadap ancaman keamanan eksternal maupun internal dan menjaga data Anda tetap aman setiap saat.

Konsol DMS

Anda dapat melakukan kueri database langsung dari tool interaksi visual, seperti Konsol DMS.

Jalankan kueri SELECT * FROM example;. Hasilnya sebagai berikut:

id | name | price                                                                    | miles                                                                    | secret
---+------+--------------------------------------------------------------------------+--------------------------------------------------------------------------+--------------------------------------------------------------------------
 1 | name | \xac0900ecbd4efc9f36eaf1c17f1ef928a50c26c73d4ac35788f543a7dd0b2fc752459e | \x931900f561358e7a92086b69d3b423fe453466a7ec556387639699153bef078857f99c | \x1d3900a4ffe264f4dc6d0138106869bc09387a500ce150501d60744f404e22a5d9aa62

Seperti yang Anda lihat, kolom id dan name berupa teks biasa, dan kolom price, miles, dan secret berupa ciphertext.

FAQ

  • T: Koneksi ke database gagal dengan error berikut: org.postgresql.util.PSQLException: ERROR: db_process_msg_api: process message failure - returned 0xf7070000.

    J: Kode kesalahan 0xf7070000 menunjukkan kegagalan impor MEK. Hal ini dapat terjadi jika akun yang sama mencoba menghubungkan ke database terenkripsi yang sama dengan MEK berbeda. Mengubah master key membuat data yang dienkripsi dengan kunci asli menjadi tidak dapat diakses. Pastikan Anda menggunakan kunci asli untuk menghubungkan ke database.

  • T: Saat menjalankan program saya, saya mendapatkan error Exception in thread "main" java.lang.IllegalAccessError: class com.alibaba.encdb.common.SymCrypto (in unnamed module @0x5c0369c4) cannot access class com.sun.crypto.provider.SunJCE (in module java.base) because module java.base does not export com.sun.crypto.provider to unnamed module @0x5c0369c4. Bagaimana cara memperbaikinya?

    J: Error ini mungkin disebabkan oleh masalah izin antar-modul akibat versi JDK yang tinggi. Untuk menyelesaikan masalah izin akses, tambahkan parameter opsi VM --add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED saat runtime, yang mengekspor com.sun.crypto.provider ke modul unnamed.