All Products
Search
Document Center

PolarDB:Integrasikan EncJDBC

Last Updated:May 16, 2026

Untuk mendukung integrasi tanpa hambatan bagi aplikasi Java Anda tanpa modifikasi kode, fitur PolarDB Selalu-rahasia menyediakan driver klien khusus, Encrypted Java Database Connectivity (EncJDBC). EncJDBC secara otomatis mendekripsi ciphertext dan mengembalikan data teks biasa. Proses ini transparan bagi aplikasi. Aplikasi Anda dapat terhubung ke PolarDB Selalu-rahasia hanya dengan beberapa baris konfigurasi dan tanpa perubahan pada kode bisnis Anda.

Arsitektur solusi

PolarDB Selalu-rahasia adalah solusi enkripsi dan dekripsi dinamis berbasis database proxy. Database proxy mengenkripsi bidang sensitif yang telah dikonfigurasi sebelumnya saat mengembalikan hasil kueri ke klien. Aplikasi klien harus menggunakan driver EncJDBC khusus untuk mendekripsi data secara transparan saat menerima data tersebut.

Alur kerja dan izin role:

  1. Permintaan kueri: Aplikasi klien mengirim kueri SQL standar ke titik akhir kluster PolarDB melalui driver EncJDBC.

  2. Pemrosesan proxy: Database proxy menerima permintaan dan meneruskannya ke kernel database backend untuk dieksekusi.

  3. Enkripsi dinamis: Saat hasil kueri dikembalikan, lapisan proxy memeriksa apakah hasil tersebut sesuai dengan kebijakan enkripsi yang telah ditetapkan. Jika ditemukan kecocokan, proxy mengenkripsi bidang sensitif dalam set hasil menggunakan kunci yang Anda tentukan dari KMS atau kunci yang dikelola sendiri.

  4. Pengembalian data: Set hasil yang telah dienkripsi dikembalikan ke klien.

  5. Dekripsi transparan: Driver EncJDBC di sisi klien secara otomatis mendekripsi ciphertext. Aplikasi menerima data teks biasa, sehingga proses ini transparan bagi kode bisnis.

Hasil kueri bervariasi berdasarkan role akun database:

  • Super administrator: Hasil kueri selalu dalam bentuk teks biasa dan tidak terpengaruh oleh kebijakan enkripsi. Hal ini berguna untuk manajemen dan audit database.

  • Pengguna biasa: Hasil kueri berupa ciphertext. Anda harus menggunakan driver EncJDBC dan kunci yang benar untuk mendekripsi data di sisi klien.

  • Pengguna lain: Hasil kueri berupa ciphertext dan tidak dapat didekripsi.

Batasan

Sebelum menerapkan fitur ini, tinjau batasan berikut untuk memastikan fitur ini memenuhi kebutuhan bisnis dan teknis Anda.

  • Persyaratan titik akhir: Aturan enkripsi hanya berlaku saat Anda terhubung menggunakan cluster endpoint atau custom endpoint. Menghubungkan langsung ke primary endpoint melewati proxy, sehingga menonaktifkan fitur enkripsi.

  • Manajemen kunci: Saat Anda menggunakan kunci yang dikelola sendiri, rotasi kunci tidak didukung, dan Anda bertanggung jawab untuk mencegah kehilangan atau kebocoran kunci. Jika kunci hilang, data terenkripsi yang sesuai tidak dapat didekripsi. Oleh karena itu, Anda harus menerapkan prosedur manajemen kunci yang ketat.

  • Versi JDK: Anda harus menggunakan JDK 1.8 atau yang lebih baru.

Gunakan kunci KMS

Langkah 1: Konfigurasikan izin akses KMS

  1. Dapatkan pasangan AccessKey: Dapatkan AccessKey ID dan AccessKey secret dari pengguna RAM. Hal ini memungkinkan aplikasi Anda memperoleh Master Encryption Key (MEK) yang dikelola oleh KMS.

    1. Jika Anda sudah memiliki pengguna RAM yang sesuai untuk mengakses KMS, Anda dapat menggunakan pengguna tersebut.

    2. Jika Anda belum memiliki pengguna RAM yang sesuai, buka Konsol RAM. Di panel navigasi kiri, pilih Identity Management > Users. Klik Create User dan ikuti petunjuk di layar untuk membuat pengguna.

  2. Berikan izin kepada pengguna RAM:

    1. Buka Konsol RAM. Di panel navigasi kiri, pilih Permission Management > Policies. Klik Create Policy. Beralih ke editor skrip, salin konten berikut, lalu klik OK. Masukkan nama kebijakan untuk membuat kebijakan tersebut.

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "KMS:Decrypt",
                  "Resource": "*"
              }
          ]
      }
    2. Kembali ke Konsol RAM. Di panel navigasi kiri, pilih Identity Management > Users. Temukan pengguna RAM target, klik Add Permissions di kolom Actions, lalu berikan kebijakan akses yang baru dibuat kepada pengguna tersebut. Hal ini memungkinkan aplikasi klien mendekripsi data menggunakan KMS.

  3. Dapatkan titik akhir instans KMS:

    • Titik akhir VPC (default): Secara default, kunci dalam instans KMS hanya dapat diakses dari dalam VPC. Anda dapat membuka halaman manajemen instans KMS, pilih wilayah tempat instans berada, temukan instans KMS target, lalu klik Details di kolom Actions. Kemudian, di tab Basic Information, lihat titik akhir VPC instans tersebut.

    • Titik akhir publik: Untuk mengakses kunci melalui internet, aktifkan akses publik di tab RD Multi-Account. Setelah Anda mengaktifkan akses publik, Anda dapat melihat Public network address di tab Basic Information.

Langkah 2: Tambahkan dependensi

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

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

Saat menambahkan dependensi Maven, ganti nilai version dengan versi yang Anda butuhkan. Anda dapat memeriksa versi terbaru aliyun-cls-jdbc di repositori Maven.

Langkah 3: Konfigurasikan parameter koneksi

Anda dapat mengonfigurasi MEK menggunakan JDBC properties, file, atau URL. Jika JDBC Anda dikonfigurasi dengan dua metode atau lebih, urutan prioritasnya adalah sebagai berikut: konfigurasi JDBC properties > konfigurasi file > konfigurasi URL.

Catatan
  • Untuk konfigurasi dan metode koneksi berikut, MEK diproses secara lokal di klien dan dikirim ke server menggunakan enkripsi amplop, sehingga memastikan bahwa MEK tidak bocor.

  • Kami menyarankan agar Anda tidak menyematkan pasangan AccessKey (AccessKey ID dan AccessKey secret) secara langsung dalam kode aplikasi Anda. Contoh dalam topik ini menggunakan variabel lingkungan sistem untuk mengelola pasangan AccessKey. Untuk informasi selengkapnya, lihat Konfigurasikan variabel lingkungan pada sistem Linux, macOS, dan Windows.

  • Untuk menggunakan kredensial akses STS temporary guna mengakses KMS, Anda dapat menggunakan SDK STS untuk memperoleh kredensial temporary, yaitu token STS. Untuk contoh SDK STS, lihat Ikhtisar SDK STS.

JDBC properties

Saat membuat koneksi JDBC standar, Anda dapat mengatur atribut kustom menggunakan objek Properties.

Contoh

// Siapkan informasi koneksi, seperti titik akhir (hostname), port, nama database (dbname), username, dan password.
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";

// Dapatkan AccessKey ID dan AccessKey secret dari variabel lingkungan.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Jika Anda menggunakan kredensial akses STS temporary untuk membaca kunci KMS, Anda juga harus menentukan token keamanan yang diperoleh.
// String stsToken = "yourSecurityToken";

// Tentukan titik akhir instans KMS. Gunakan titik akhir publik untuk akses internet atau titik akhir VPC untuk akses dalam VPC.
String kmsEndpoint = "your-kms-endpoint";

Properties props = new Properties();
props.setProperty("user", username);
props.setProperty("password", password);
props.setProperty("ALIBABA_CLOUD_ACCESS_KEY_ID", accessKeyId);
props.setProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET", accessKeySecret);
props.setProperty("ALIBABA_CLOUD_KMS_ENDPOINT", kmsEndpoint);
// props.setProperty("ALIBABA_CLOUD_STS_TOKEN", stsToken);

// Berikut adalah format URL koneksi untuk database MySQL: "jdbc:mysql:encdb://%s:%s/%s".
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s", hostname, port, dbname);

// Muat driver EncJDBC untuk database MySQL.
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");

// Dapatkan koneksi database.
Connection connection = DriverManager.getConnection(dbUrl, props);

// ... Eksekusi kueri ...
URL

Anda dapat menyematkan parameter untuk memperoleh kunci KMS dalam URL.

Contoh

// Siapkan informasi koneksi, seperti titik akhir (hostname), port, nama database (dbname), username, dan password.
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";

// Dapatkan AccessKey ID dan AccessKey secret dari variabel lingkungan.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Jika Anda menggunakan kredensial akses STS temporary untuk membaca kunci KMS, Anda juga harus menentukan token keamanan yang diperoleh.
// String stsToken = "yourSecurityToken";

// Tentukan titik akhir instans KMS. Gunakan titik akhir publik untuk akses internet atau titik akhir VPC untuk akses dalam VPC.
String kmsEndpoint = "your-kms-endpoint";

// Berikut adalah format URL koneksi untuk database MySQL.
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s?ALIBABA_CLOUD_ACCESS_KEY_ID=%s&ALIBABA_CLOUD_ACCESS_KEY_SECRET=%s&ALIBABA_CLOUD_KMS_ENDPOINT=%s", hostname, port, dbname, accessKeyId, accessKeySecret, kmsEndpoint);
// Gunakan token STS.
// String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s?ALIBABA_CLOUD_ACCESS_KEY_ID=%s&ALIBABA_CLOUD_ACCESS_KEY_SECRET=%s&ALIBABA_CLOUD_KMS_ENDPOINT=%s&ALIBABA_CLOUD_STS_TOKEN=%s", hostname, port, dbname, accessKeyId, accessKeySecret, kmsEndpoint, stsToken);

// Muat driver EncJDBC untuk database MySQL.
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");

// Dapatkan koneksi database.
Connection connection = DriverManager.getConnection(dbUrl, username, password);

// ... Eksekusi kueri ...

Langkah 4: Kueri data

Setelah terhubung ke database, Anda dapat melakukan operasi database seperti halnya kueri JDBC biasa. EncJDBC secara otomatis mendekripsi data di kolom terenkripsi dan mengembalikannya sebagai teks biasa.

Contoh

// Buat pernyataan kueri.
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table_name");

// Iterasi set hasil.
while (resultSet.next()) {
    for (int i = 0; i < resultSet.getMetaData().getColumnCount(); i++) {
        System.out.print(resultSet.getString(i + 1));
        System.out.print("\t");
    }
    System.out.print("\n");
}

Lampiran: Contoh kode

Catatan

Contoh ini menggunakan Maven 3.9.9 dan IntelliJ IDEA Community Edition 2024.1.2.

import java.sql.*;
import java.util.Properties;

public class EncryptedColumnAccess {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // Ganti detail koneksi berikut dengan informasi instans Anda, seperti hostname, port, dbname, username, dan password.
        String hostname = "your-hostname";
        String port = "your-port";
        String dbname = "your-database-name";
        String username = "your-username";
        String password = "your-password";

        // Dapatkan AccessKey ID dan AccessKey secret dari variabel lingkungan.
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // Jika Anda menggunakan kredensial akses STS temporary untuk membaca kunci KMS, Anda juga harus menentukan token keamanan yang diperoleh.
        // String stsToken = "yourSecurityToken";

        // Tentukan titik akhir instans KMS. Gunakan titik akhir publik untuk akses internet atau titik akhir VPC untuk akses dalam VPC.
        String kmsEndpoint = "your-kms-endpoint";

        Properties props = new Properties();
        props.setProperty("user", username);
        props.setProperty("password", password);
        props.setProperty("ALIBABA_CLOUD_ACCESS_KEY_ID", accessKeyId);
        props.setProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET", accessKeySecret);
        props.setProperty("ALIBABA_CLOUD_KMS_ENDPOINT", kmsEndpoint);
        // props.setProperty("ALIBABA_CLOUD_STS_TOKEN", stsToken);

        // Format URL koneksi untuk database MySQL adalah "jdbc:mysql:encdb://%s:%s/%s".
        String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s", hostname, port, dbname);

        // Muat driver EncJDBC.
        Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");

        // Dapatkan koneksi database.
        Connection connection = DriverManager.getConnection(dbUrl, props);

        // Eksekusi kueri.
        try {
            // Buat pernyataan kueri.
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM users");

            // Iterasi set hasil.
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("username");
                String phone = resultSet.getString("phone");

                // Proses bidang lain berdasarkan skema tabel Anda.
                System.out.println("ID: " + id + ", Name: " + name + ", Phone: " + phone);
            }

            // Tutup resource.
            resultSet.close();
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Gunakan kunci lokal

Langkah 1: Hasilkan MEK

Peringatan

Database tidak menyimpan, mengelola, menghasilkan, atau mencadangkan Master Encryption Key (MEK) Anda. Anda bertanggung jawab untuk menghasilkan, mengelola, dan mencadangkan MEK secara aman, karena hal ini sangat penting bagi keamanan data Anda.

MEK: Klien mengirimkan MEK ke server database secara aman menggunakan enkripsi amplop, sehingga kunci tidak pernah terekspos dalam bentuk teks biasa selama transit.

Rentang nilai: String heksadesimal 16 byte (32 karakter). Contoh: 00112233445566778899aabbccddeeff.

Metode umum pembuatan: Gunakan tool pembuatan password atau fungsi acak dalam bahasa pemrograman.

Contoh

  • Pada sistem Linux, gunakan tool OpenSSL bawaan. Jalankan perintah openssl rand -hex 16 untuk menghasilkan kunci.

    # Gunakan OpenSSL untuk menghasilkan kunci acak yang aman
    openssl rand -hex 16
    # Contoh output: 11ce9a9489fab7355cf710837cea5d5b
  • Pada sistem Windows, instal paket OpenSSL.

Langkah 2: Tambahkan dependensi

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

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

Saat menambahkan dependensi Maven, ganti nilai version dengan versi yang Anda butuhkan. Anda dapat memeriksa versi terbaru aliyun-cls-jdbc di repositori Maven.

Langkah 3: Mengonfigurasi koneksi MEK database

Anda dapat mengonfigurasi MEK menggunakan JDBC properties, file, atau URL. Jika Anda menggunakan dua metode atau lebih, urutan prioritas berikut berlaku: JDBC properties > File > URL.

Catatan

Dalam metode konfigurasi dan koneksi berikut, MEK diproses secara lokal di klien dan dikirim ke server menggunakan metode aman (enkripsi amplop). Hal ini memastikan bahwa MEK tidak bocor.

JDBC properties

Saat membuat koneksi JDBC standar, Anda dapat mengatur atribut kustom menggunakan objek Properties.

Contoh

// Siapkan informasi koneksi, seperti titik akhir (hostname), port, nama database (dbname), username, dan password.
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";

// Kunci master pelanggan.
String mek = "00112233445566778899aabbccddeeff"; 

Properties props = new Properties();
props.setProperty("user", username);
props.setProperty("password", password);
props.setProperty("MEK", mek);

// Format URL koneksi untuk database MySQL adalah "jdbc:mysql:encdb://%s:%s/%s".
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s", hostname, port, dbname);

// Muat driver EncJDBC untuk database MySQL.
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");

// Dapatkan koneksi database.
Connection connection = DriverManager.getConnection(dbUrl, props);

// ... Eksekusi kueri ...
File
Catatan

Metode konfigurasi file hanya berlaku untuk mengonfigurasi MEK lokal.

Anda dapat mengimpor parameter dari file konfigurasi untuk mengatur MEK yang diperlukan. Atur properti sistem Java encJdbcConfigFile ke path file tersebut. Jika properti ini tidak diatur, driver akan mencari file encjdbc.conf di classpath aplikasi. Isi file konfigurasi adalah sebagai berikut:

MEK=00112233445566778899aabbccddeeff

Contoh

  1. Anda dapat menentukan lokasi file konfigurasi dengan salah satu dari dua cara berikut:

    • Letakkan file di direktori resources proyek Anda, seperti yang ditunjukkan pada gambar berikut:

      image

    • Letakkan file di direktori root proyek, yaitu direktori runtime program.

  2. Setelah mengonfigurasi file, Anda tidak perlu melakukan konfigurasi tambahan dalam program Anda, seperti yang ditunjukkan pada kode berikut:

    // Siapkan informasi koneksi, seperti titik akhir (hostname), port, nama database (dbname), username, dan password.
    String hostname = "your-hostname";
    String port = "your-port";
    String dbname = "your-database-name";
    String username = "your-username";
    String password = "your-password";
    
    // Format URL koneksi untuk database MySQL adalah "jdbc:mysql:encdb://%s:%s/%s".
    String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s", hostname, port, dbname);
    
    // Muat driver EncJDBC untuk database MySQL.
    Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");
    
    // Dapatkan koneksi database.
    Connection connection = DriverManager.getConnection(dbUrl, username, password);
    
    // ... Eksekusi kueri ...
URL

Anda dapat menyematkan parameter seperti MEK dalam URL.

Contoh

// Siapkan informasi koneksi, seperti titik akhir (hostname), port, nama database (dbname), username, dan password.
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";

 // Kunci master pelanggan.
String mek = "00112233445566778899aabbccddeeff";

// Format URL koneksi untuk database MySQL adalah "jdbc:mysql:encdb://%s:%s/%s?MEK=%s".
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s?MEK=%s", hostname, port, dbname, mek);

// Muat driver EncJDBC untuk database MySQL.
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");

// Dapatkan koneksi database.
Connection connection = DriverManager.getConnection(dbUrl, username, password);

// ... Eksekusi kueri ...

Langkah 4: Kueri data

Setelah terhubung ke database, Anda dapat melakukan operasi database seperti halnya kueri JDBC biasa. EncJDBC secara otomatis mendekripsi data di kolom terenkripsi dan mengembalikannya sebagai teks biasa.

Contoh

// Buat pernyataan kueri.
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table_name");

// Iterasi set hasil.
while (resultSet.next()) {
    for (int i = 0; i < resultSet.getMetaData().getColumnCount(); i++) {
        System.out.print(resultSet.getString(i + 1));
        System.out.print("\t");
    }
    System.out.print("\n");
}

Lampiran: Contoh kode

Catatan

Contoh ini menggunakan Maven 3.9.9 dan IntelliJ IDEA Community Edition 2024.1.2.

import java.sql.*;
import java.util.Properties;

public class EncryptedColumnAccess {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // Ganti detail koneksi berikut dengan informasi instans Anda, seperti hostname, port, dbname, username, dan password.
        String hostname = "your-hostname";
        String port = "your-port";
        String dbname = "your-database-name";
        String username = "your-username";
        String password = "your-password";
        
        // Ini adalah contoh kunci. Kami menyarankan agar Anda menggunakan kunci yang lebih kompleks di lingkungan produksi.
        String mek="00112233445566778899aabbccddeeff";

        Properties props = new Properties();
        props.setProperty("user", username);
        props.setProperty("password", password);
        props.setProperty("MEK", mek);
        
        // Format URL koneksi untuk database MySQL adalah "jdbc:mysql:encdb://%s:%s/%s".
        String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s", hostname, port, dbname);

        // Muat driver EncJDBC.
        Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");

        // Dapatkan koneksi database.
        Connection connection = DriverManager.getConnection(dbUrl, props);

        // Eksekusi kueri.
        try {
            // Buat pernyataan kueri.
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM users");

            // Iterasi set hasil.
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("username");
                String phone = resultSet.getString("phone");

                // Proses bidang lain berdasarkan skema tabel Anda.
                System.out.println("ID: " + id + ", Name: " + name + ", Phone: " + phone);
            }

            // Tutup resource.
            resultSet.close();
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

FAQ

Apa yang harus saya lakukan jika menerima error Code: Forbidden.KeyNotFound; Message: code: 404, The specified Key is not found. saat mengintegrasikan EncJDBC?

Periksa apakah titik akhir instans KMS telah diatur dengan benar dalam aplikasi Anda.

  • Periksa lingkungan aplikasi: Titik akhir instans KMS berbeda untuk VPC dan internet.

    • Titik akhir VPC (default): Secara default, kunci dalam instans KMS hanya dapat diakses dari dalam VPC. Anda dapat membuka halaman manajemen instans KMS, pilih wilayah tempat instans berada, temukan instans KMS target, lalu klik Details di kolom Operation. Kemudian, di tab Basic Information, lihat titik akhir VPC instans tersebut.

    • Titik akhir publik: Untuk mengakses kunci melalui internet, aktifkan akses publik di tab RD Multi-Account. Setelah Anda mengaktifkan akses publik, Anda dapat melihat Public network address di tab Basic Information.

  • Periksa wilayah instans KMS:

    • Sesuaikan titik akhir berdasarkan wilayah instans KMS Anda. Misalnya, titik akhir publik untuk China (Hangzhou) adalah kms.cn-hangzhou.aliyuncs.com, dan titik akhir publik untuk China (Beijing) adalah kms.cn-beijing.aliyuncs.com.

Apa yang harus saya lakukan jika menerima error Code: UnsupportedOperation; Message: code: 400, This action is not supported. saat mengintegrasikan EncJDBC?

Error ini dapat terjadi karena alasan berikut:

  • Anda mungkin menggunakan kunci master dari kunci default alih-alih Customer Master Key KMS.

    Catatan

    Kunci layanan default hanya dapat digunakan untuk enkripsi sisi server oleh Layanan Alibaba Cloud. Kunci tersebut tidak dapat digunakan untuk enkripsi data sisi klien Anda. Untuk PolarDB Selalu-rahasia, Anda harus menggunakan customer master key, yang dapat Anda buat dengan menyediakan instans KMS.

  • Akses jaringan publik tidak diaktifkan untuk instans KMS.

Apa yang harus saya lakukan jika menerima error Code: Forbidden.NoPermission; Message: code: 403, This operation for XXX is forbidden by permission system. saat mengintegrasikan EncJDBC?

Pasangan AccessKey Anda (AccessKey ID dan AccessKey secret) mungkin tidak memiliki izin yang diperlukan untuk mengakses KMS. Berikan izin KMS:Decrypt kepada pasangan AccessKey tersebut agar aplikasi klien dapat mendekripsi data secara dinamis.

  1. Buka Konsol RAM. Di panel navigasi kiri, pilih Permission Management > Policies. Klik Create Policy. Beralih ke editor skrip, salin konten berikut, lalu klik OK. Masukkan nama kebijakan untuk membuat kebijakan tersebut.

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "KMS:Decrypt",
                "Resource": "*"
            }
        ]
    }
  2. Kembali ke Konsol RAM. Di panel navigasi kiri, pilih Identity Management > Users. Temukan pengguna RAM target, klik Add Permissions di kolom Actions, lalu berikan kebijakan akses yang baru dibuat kepada pengguna tersebut. Hal ini memungkinkan aplikasi klien mendekripsi data menggunakan KMS.