Tüm Ürünler
Search
Belge Merkezi

Database Autonomy Service:EncJDBC Entegrasyonu

Son Güncelleme:Oct 15, 2026

Java uygulamanızdan sütun şifreleme ile korunan sütunlardaki verilere erişmek için veritabanınıza bağlanmak üzere EncJDBC sürücüsünü kullanın. EncJDBC, minimum yapılandırma ile şifreli sütunlardan düz metni alır.

Ana şifreleme anahtarını sağladığınızda tüm veri iletim bağlantısı şifrelenir. EncJDBC istemcisi verilerin şifresini otomatik olarak çözer ve uygulamanızın minimal kod değişikliğiyle görüntüleyebileceği düz metni döndürür.

Ön Koşullar

  • Şifreleme gerektiren sütunları bulmak için bir hassas veri algılama taraması çalıştırdınız.

  • Hedef veritabanı için sütun şifrelemeyi yapılandırdınız ve veritabanı hesabının iznini Ciphertext Permission (JDBC Decryption) olarak ayarladınız. Ayrıntılı talimatlar için bkz. sütun şifreleme.

  • Örnek için bağlantı ayrıntıları: ana bilgisayar adı, bağlantı noktası, veritabanı adı, kullanıcı adı ve parola.

MEK Oluşturma

  • Değer aralığı: Tam olarak 32 karakter uzunluğunda, 16 baytlık onaltılık bir dize.

Sütun şifrelemeyi yapılandırırken seçtiğiniz key type değerine bağlı olarak veritabanının şifresini çözmek için MEK olarak KMS Key veya local key kullanabilirsiniz.

KMS key

Önemli

KMS key kullanırken KMS hizmetinin kullanılabilir olduğundan emin olun. Aksi takdirde sürekli gizli kalan istemci sürücüsü EncJDBC çalışamaz.

Veritabanı sütun şifreleme yapılandırmanızda seçilen KMS key öğesine sahip KMS örneğinin uç noktasını ve bu KMS anahtarını istemciden okumak için Alibaba Cloud hesabınızın veya RAM kullanıcınızın (KMS şifre çözme iznine sahip olması gerekir) AccessKey ID ve AccessKey secret değerlerini alın. Aşağıdaki adımları izleyin:

  1. Bir Alibaba Cloud hesabı veya bir RAM user kullanarak konsola giriş yapın.

  2. Bir RAM user kullanıyorsanız, RAM user'a KMS şifre çözme izni verin.

    1. Özel ilke oluşturun. Aşağıdaki ilke içeriğini kullanın:

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "KMS:Decrypt",
                  "Resource": "*"
              }
          ]
      }
    2. Oluşturulan özel ilkeyi belirtilen RAM user'a ekleyin. Ayrıntılar için bkz. RAM user izinlerini yönetme.

  3. KMS örneği uç noktasını alın.

    • Varsayılan olarak bir KMS örneğindeki anahtarlara yalnızca VPC ağlarından erişilebilir. KMS instance management page sayfasında hedef KMS örneğinizi bulun, Actions öğesini ve ardından Details öğesini tıklayın ve Basic Information sekmesinde VPC uç noktasını görüntüleyin.

    • Anahtarlara genel ağ üzerinden erişmek için genel ağ erişimini etkinleştirin ve ardından genel uç noktayı görüntüleyin. Ayrıntılar için bkz. Genel ağ erişimini etkinleştirme.

  4. Erişim kimlik bilgilerini alın.

    Alibaba Cloud hesabınız veya RAM user'ınız için AccessKey oluştururken AccessKey ID ve AccessKey secret değerlerini kaydedin. Ayrıntılar için bkz. AccessKey oluşturma.

Local key

Veritabanı sütun şifreleme yapılandırmanızda Encryption Method değeri Local Key olarak ayarlandığında bir MEK oluşturun. Örnek: 00112233445566778899aabbccddeeff.

Yaygın oluşturma yöntemleri arasında parola oluşturucular veya programlama dillerindeki rastgele işlevler bulunur.

Örnek:

  • Linux'ta dahili OpenSSL aracını kullanarak openssl rand -hex 16 komutunu çalıştırarak bir anahtar oluşturun.

  • Windows'ta OpenSSL software package yükleyin.

İstemci entegrasyon talimatları

Önemli

Java için JDK 1.8 veya sonraki bir sürümü kullanın.

İstemci tarafında veritabanı bağlantı sürücüsünü EncJDBC olarak değiştirin, veritabanı bağlantı URL'sini güncelleyin ve şifreli veritabanı sütunlarından düz metne erişmek için MEK belirtin.

1. Bağımlılıkları yükleme

Aşağıdaki bağımlılığı Maven proje yapılandırma dosyanıza pom.xml ekleyin.

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

2. Veritabanına bağlanmak için MEK yapılandırma

Aşağıdaki yöntemler MEK nasıl yapılandırılacağını açıklar: JDBC özellikleri yapılandırması, dosya yapılandırması ve URL yapılandırması. Birden fazla yöntemi aynı anda yapılandırırsanız öncelik sırası şu şekildedir: JDBC özellikleri yapılandırması > dosya yapılandırması > URL yapılandırması.

Not
  • URL yapılandırmasında birden fazla parametreyi & ile ayırın.

  • Aşağıdaki tüm yapılandırmalarda ve bağlantı yöntemlerinde MEK istemcide yerel olarak işlenir ve MEK sızıntısını önlemek için zarf şifreleme kullanılarak sunucuya güvenli bir şekilde gönderilir.

Veritabanı sütun şifreleme yapılandırmanızdaki Encryption method değerine bağlı olarak veritabanına local key veya KMS key kullanarak bağlanmayı seçin.

Connect to the database using a KMS key

Önemli
  • KMS tarafından yönetilen bir MEK almak için STS geçici kimlik bilgilerini kullanıyorsanız geçici kimlik bilgisi STS belirtecini almak için STS SDK'yı kullanın. STS SDK örnekleri için bkz. STS SDK'ya genel bakış.

  • Erişim kimlik bilgilerini (AccessKey ID ve AccessKey secret) doğrudan uygulama kodunuza sabit kodlamayın. Bu örnekte erişim kimlik bilgilerini yönetmek için sistem ortam değişkenleri kullanılır. Ayrıntılar için bkz. Linux, macOS ve Windows'ta ortam değişkenlerini yapılandırma.

JDBC özellikleri yapılandırması

Standart JDBC bağlantı sırasında Properties kullanarak özel özellikler ayarlamanıza olanak tanır. Aşağıdaki örnek JDBC özelliklerinin nasıl yapılandırılacağını ve JDBC'nin nasıl çalıştırılacağını gösterir:

// Prepare connection information such as hostname, port, database name, username, and password.
// ...
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";
// Retrieve access credentials (AccessKey ID and AccessKey secret) from environment variables.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// If using STS temporary credentials to read the KMS key, also provide the obtained STS token.
// String stsToken = "yourSecurityToken";
// KMS instance endpoint. Use the public endpoint if public network access is enabled. Use the VPC endpoint for VPC access.
String kmsEndpoint = "kms.cn-hangzhou.aliyuncs.com";
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");
// Connection URL format for MySQL: "jdbc:mysql:encdb://%s:%s/%s".
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s", hostname, port, dbname);
// Load the EncJDBC driver for MySQL.
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");
// Get the database connection.
Connection connection = DriverManager.getConnection(dbUrl, props);
// ... Execute queries ...

URL yapılandırması

Aşağıda gösterildiği gibi KMS anahtarını almak için gereken parametreleri doğrudan URL'ye gömebilirsiniz:

// Prepare connection information such as hostname, port, database name, username, and password.
// ...
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";
// Retrieve access credentials (AccessKey ID and AccessKey secret) from environment variables.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// If using STS temporary credentials to read the KMS key, also provide the obtained STS token.
// String stsToken = "yourSecurityToken";
// KMS instance endpoint. Use the public endpoint if public network access is enabled. Use the VPC endpoint for VPC access.
String kmsEndpoint = "kms.cn-hangzhou.aliyuncs.com";
// Connection URL format for 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);
// With STS token.
// 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);
// Load the EncJDBC driver for MySQL.
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");
// Get the database connection.
Connection connection = DriverManager.getConnection(dbUrl, username, password);
// ... Execute queries ...

Connect to the database using a local key

JDBC özellikleri yapılandırması

Standart JDBC bağlantı sırasında Properties kullanarak özel özellikler ayarlamanıza olanak tanır. Aşağıdaki örnek JDBC özelliklerinin nasıl yapılandırılacağını ve JDBC'nin nasıl çalıştırılacağını gösterir:

// Prepare connection information such as hostname, port, database name, username, and password.
// ...
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";
// Master encryption key.
String mek = "00112233445566778899aabbccddeeff"; 
Properties props = new Properties();
props.setProperty("user", username);
props.setProperty("password", password);
props.setProperty("MEK", mek);
// Connection URL format for MySQL: "jdbc:mysql:encdb://%s:%s/%s". For PostgreSQL, use "jdbc:postgresql:encdb://%s:%s/%s".
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s", hostname, port, dbname);
// Load the EncJDBC driver for MySQL. For PostgreSQL, use "com.aliyun.encdb.postgresql.jdbc.EncDriver".
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");
// Get the database connection.
Connection connection = DriverManager.getConnection(dbUrl, props);
// ... Execute queries ...

Dosya yapılandırması

Gerekli MEK gibi parametreleri bir yapılandırma dosyası aracılığıyla içe aktarabilirsiniz.

Not

Dosya yapılandırması yalnızca local key MEK'ler için geçerlidir.

Projenizde property adlı bir encJdbcConfigFile ayarlayabilir ve değerini yapılandırma dosyası yoluna (varsayılan olarak encjdbc.conf dosyası kullanılır) ayarlayabilirsiniz. Yapılandırma dosyasının içeriği aşağıdaki gibidir:

MEK=00112233445566778899aabbccddeeff

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

  • Dosyayı projenizin resources dizinine aşağıda gösterildiği gibi koyun:

    src
      main
        java
        resources
          encjdbc.conf
  • Dosyayı proje kök dizinine (programın çalışma zamanı dizini) koyun.

Dosya yapılandırmasını ayarladıktan sonra kodunuzda aşağıda gösterildiği gibi ek bir yapılandırmaya gerek yoktur:

// Prepare connection information such as hostname, port, database name, username, and password.
// ...
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";
// Connection URL format for MySQL: "jdbc:mysql:encdb://%s:%s/%s". For PostgreSQL, use "jdbc:postgresql:encdb://%s:%s/%s".
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s", hostname, port, dbname);
// Load the EncJDBC driver for MySQL. For PostgreSQL, use "com.aliyun.encdb.postgresql.jdbc.EncDriver".
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");
// Get the database connection.
Connection connection = DriverManager.getConnection(dbUrl, username, password);
// ... Execute queries ...

URL yapılandırması

Aşağıda gösterildiği gibi MEK gibi parametreleri doğrudan URL'ye gömebilirsiniz:

// Prepare connection information such as hostname, port, database name, username, and password.
// ...
String hostname = "your-hostname";
String port = "your-port";
String dbname = "your-database-name";
String username = "your-username";
String password = "your-password";
 // Master encryption key.
String mek = "00112233445566778899aabbccddeeff";
// Connection URL format for MySQL: "jdbc:mysql:encdb://%s:%s/%s?MEK=%s". For PostgreSQL, use "jdbc:postgresql:encdb://%s:%s/%s?MEK=%s".
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s?MEK=%s", hostname, port, dbname, mek);
// Load the EncJDBC driver for MySQL. For PostgreSQL, use "com.aliyun.encdb.postgresql.jdbc.EncDriver".
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");
// Get the database connection.
Connection connection = DriverManager.getConnection(dbUrl, username, password);
// ... Execute queries ...

3. Şifreli sütunlardan düz metin verilerini sorgulama

Veritabanına başarıyla bağlandıktan sonra standart bir JDBC sorgusu gibi çalıştırın. EncJDBC şifreli sütunların şifresini otomatik olarak çözer ve düz metin verilerini döndürür.

Örnek kod:

// Execute the query.
// Create a query statement.
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table_name");
// Traverse the result set.
while (resultSet.next()) {
    for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
        System.out.print(rs.getString(i + 1));
        System.out.print("\t");
    }
    System.out.print("\n");
}

SSS

  • S: Uygulamayı çalıştırdığımda neden 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 hatasını alıyorum?

    C: Bu hata daha yeni JDK sürümlerinin modüller arası erişimi kısıtlamasından kaynaklanabilir. Bu sorunu çözmek için çalışma zamanında --add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED VM seçeneğini ekleyin. Bu seçenek com.sun.crypto.provider öğesini adsız modüle dışa aktarır ve erişim sorununu çözer.

  • S: Uygulamayı çalıştırdığımda neden failed in mek provision: you might have an incorrect mek setting. Detail:gcmEncrypt error hatasını alıyorum?

    C: Bu sorun Oracle JDK ile yaygındır. Çözmek için aşağıdaki yöntemlerden birini kullanın:

    • Amazon Corretto JDK kullanın.

    • Oracle JDK'nız için bir güvenlik sağlayıcısını aşağıdaki adımları izleyerek manuel olarak yapılandırın:

      1. JDK kurulum dizininizi bulun.

      2. <jdk_installation_path>/conf/security/ dizininde java.security dosyasını bulun.

      3. java.security dosyasını düzenleyin. List of providers and their preference orders (see above): bölümüne aşağıdaki satırı ekleyin:

        security.provider.14=org.bouncycastle.jce.provider.BouncyCastleProvider