Tüm Ürünler
Search
Belge Merkezi

ApsaraDB RDS:Column encryption driver (JDBC)

Son Güncelleme:Oct 12, 2026

Java uygulamanızdan veritabanınızdaki şifrelenmiş verilere erişmek için Alibaba Cloud sütun şifreleme sürücüsünü (JDBC) kullanın. Sürücü, geçerli bir ana şifreleme anahtarını (MEK) kullanarak şifreli metni otomatik ve saydam bir şekilde düz metne çözer.

Ön koşullar

  • Sütun şifrelemeyi etkinleştirmiş olmanız gerekir. Daha fazla bilgi için bkz. sütun şifreleme.

    Not

    Sütun şifrelemeyi etkinleştirdikten sonra hedef veritabanında rds_encdb uzantısı varsayılan olarak yüklenir. rds_encdb uzantısının durumunu kontrol etmek için aşağıdaki SQL ifadesini çalıştırın: SELECT EXISTS (SELECT * FROM pg_extension WHERE extname = 'rds_encdb');

  • Şifrelenmiş veritabanı için ana bilgisayar adı, bağlantı noktası, veritabanı adı, kullanıcı adı ve parola dahil olmak üzere bağlantı bilgilerine sahip olmanız gerekir. Bir örneğin dahili veya genel uç noktasının nasıl elde edileceğini öğrenmek için bkz. Uç noktaları ve bağlantı noktası numaralarını görüntüleme ve değiştirme.

  • Veritabanı kullanıcısının, sütun şifreleme için ciphertext permission (JDBC decryption) yetkisine sahip olması gerekir. Daha fazla bilgi için bkz. sütun şifreleme.

Kullanım notları

  • MEK değerini güvenli bir şekilde saklayın.

  • JDK 1.8 veya sonraki bir sürümü kullanın.

Yordam

Not

Bu konuda Maven tabanlı bir Java projesi örnek olarak kullanılmıştır.

Adım 1: Maven bağımlılığını yapılandırma

Maven projenizin pom.xml dosyasına aşağıdaki bağımlılığı ekleyin.

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

Adım 2: URL ve MEK yapılandırma

JDBC ile şifrelenmiş verilere erişmeden önce MEK ve URL gibi parametreleri yapılandırın.

Parametre

Örnek

Açıklama

MEK

00112233445566778899aabbccddeeff

Kullanıcı tanımlı bir ana şifreleme anahtarı.

  • openssl rand -hex 16 gibi bir araç, bir programlama dilinin rastgele işlevi veya üçüncü taraf bir Key Management Service (KMS) üzerinden anahtar oluşturabilirsiniz.

  • Değer aralığı: 16 baytlık onaltılık dize (32 karakter).

Uyarı

Güvenlik amacıyla veritabanı MEK'inizi saklamaz, yönetmez, oluşturmaz veya yedeklemez. Anahtar oluşturma ve yedekleme sorumluluğu size aittir. MEK'i kaybetmeniz şifrelenmiş verilerinize kalıcı olarak erişiminizi kaybetmenize neden olur.

URL

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

Sütun şifreleme sürücüsünü kullanmak için URL ön ekini jdbc:postgresql:encdb:// olarak değiştirin.

MEK'i yapılandırma

MEK değerini üç farklı şekilde yapılandırabilirsiniz. JDBC bağlantınızda birden fazla yöntemi yapılandırırsanız öncelik sırası şu şekildedir: JDBC Properties yapılandırması > Dosya yapılandırması > URL yapılandırması.

Not
  • URL yapılandırma yönteminde birden fazla parametreyi ampersan (&) karakteri ile birleştirebilirsiniz.

  • Üç bağlantı yönteminin tamamında MEK istemci tarafında yerel olarak işlenir ve zarf şifreleme kullanılarak sunucuya güvenli bir şekilde dağıtılır; bu sayede anahtarın açığa çıkması önlenir.

JDBC özellikleri

Standart JDBC, bağlantı kurarken Properties nesnesinde özel nitelikler yapılandırmanıza olanak tanır. Örneğin:

// Prepare connection information, such as hostname, port, dbname, username, and 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);
// ... Initiate a query ...

Dosya

MEK gibi parametreleri bir yapılandırma dosyasından içe aktarabilirsiniz. Bunu yapmak için encJdbcConfigFile özelliğini dosyanın yoluna ayarlayın. Bu özellik ayarlanmazsa sürücü varsayılan olarak encjdbc.conf dosyasını kullanır.

Yapılandırma dosyası aşağıdakileri içerir:

MEK=****

Yapılandırma dosyasını aşağıdaki iki konumdan birine yerleştirebilirsiniz:

  • encjdbc.conf dosyasını projenizin resources dizinine yerleştirin.

  • Dosyayı, uygulamanın çalışma zamanı dizini olan projenin kök dizinine yerleştirin.

MEK bir dosyada yapılandırıldığında ek kod gerekmez. Örneğin:

// Prepare connection information, such as hostname, port, dbname, username, and password.
// ...
String dbUrl = String.format("jdbc:postgresql:encdb://%s:%s/%s", hostname, port, dbname);
Connection connection = DriverManager.getConnection(dbUrl, username, password);
// ... Initiate a query ...

URL

MEK ve ENC_ALGO gibi parametreleri URL'ye gömebilirsiniz. Örneğin:

// Prepare connection information, such as hostname, port, dbname, username, and 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);
// ... Initiate a query ...

Kod örneği

Aşağıdaki kod, JDBC Properties yapılandırmasını kullanarak MEK değerini yapılandırmaya ilişkin eksiksiz bir örneği göstermektedir. Bu kodu çalıştırmadan önce hedef veritabanında sütun şifrelemenin kurulduğundan emin olun.

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 {
        // Update the following connection information (hostname, port, dbname, username, password) based on your actual environment.
        String hostname = "pgm-****.pg.rds.aliyuncs.com"; // The instance endpoint. Replace with your actual value.
        String port = "5432"; // The database port. Replace with your actual value.
        String dbname = "testdb"; // The database name. Replace with your actual value.
        String username = "user"; // The database username. Use a user that has the ciphertext permission (JDBC decryption).
        String password = "password"; // The password for the database user.
        
        // This is a sample key. We recommend using a stronger key to improve security.
        String MEK = "00112233445566778899aabbccddeeff";
        
       // Create database connection properties.
        Properties props = new Properties();
        props.setProperty("user", username);
        props.setProperty("password", password);
        props.setProperty("MEK", MEK);
        
        // Format the database connection URL.
        String dbUrl = String.format("jdbc:postgresql:encdb://%s:%s/%s", hostname, port, dbname);
        
        // Get the database connection using DriverManager.
        Connection connection = DriverManager.getConnection(dbUrl, props);
        
        // Execute a query to retrieve data from the test table.
        ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM test_table");
        while (rs.next()) {
            for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { // Column indexes start from 1.
                System.out.print(rs.getString(i) + "\t");
            }
            System.out.println(); // New line.
        }
        
        // Close resources.
        rs.close();  // Close the result set.
        connection.close(); // Close the connection.
    }
}