Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Pilote de chiffrement de colonne (JDBC)

Dernière mise à jour :Oct 12, 2026

Utilisez le pilote de chiffrement de colonne Alibaba Cloud (JDBC) pour accéder aux données chiffrées de votre base de données depuis une application Java. Ce pilote utilise une clé de chiffrement principale (MEK) valide pour déchiffrer automatiquement et de manière transparente les textes chiffrés en texte clair.

Prérequis

  • Activez le chiffrement de colonne. Pour plus d'informations, consultez la rubrique Chiffrement de colonne.

    Remarque

    Une fois le chiffrement de colonne activé, l'extension rds_encdb est installée par défaut dans la base de données cible. Exécutez l'instruction SQL suivante pour vérifier l'état de l'extension rds_encdb : SELECT EXISTS (SELECT * FROM pg_extension WHERE extname = 'rds_encdb');

  • Récupérez les informations de connexion à la base de données chiffrée, notamment le nom d'hôte, le port, le nom de la base de données, le nom d'utilisateur et le mot de passe. Pour savoir comment obtenir le point de terminaison interne ou public d'une instance, consultez la rubrique Afficher et modifier les points de terminaison et les numéros de port.

  • L'utilisateur de la base de données doit disposer de l'autorisation ciphertext permission (JDBC decryption) pour le chiffrement de colonne. Pour plus d'informations, consultez la rubrique Chiffrement de colonne.

Remarques sur l'utilisation

  • Stockez la MEK de manière sécurisée.

  • Utilisez JDK 1.8 ou une version ultérieure.

Procédure

Remarque

Cette rubrique utilise un projet Java basé sur Maven comme exemple.

Étape 1 : Configurer la dépendance Maven

Ajoutez la dépendance suivante au fichier pom.xml de votre projet Maven.

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

Étape 2 : Configurer l'URL et la MEK

Avant d'accéder aux données chiffrées avec JDBC, configurez des paramètres tels que la MEK et l'URL.

Paramètre

Exemple

Description

MEK

00112233445566778899aabbccddeeff

Clé de chiffrement principale définie par l'utilisateur.

  • Générez une clé à l'aide d'un outil tel que openssl rand -hex 16, d'une fonction aléatoire d'un langage de programmation ou en obtenant une clé auprès d'un service de gestion des clés (KMS) tiers.

  • Plage de valeurs : chaîne hexadécimale de 16 octets (32 caractères).

Avertissement

Pour des raisons de sécurité, la base de données ne stocke, ne gère, ne génère ni ne sauvegarde votre MEK. Vous êtes responsable de la génération et de la sauvegarde des clés. La perte de la MEK entraîne la perte permanente de l'accès à vos données chiffrées.

URL

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

Pour utiliser le pilote de chiffrement de colonne, modifiez le préfixe de l'URL en jdbc:postgresql:encdb://.

Configurer la MEK

Vous pouvez configurer la MEK de trois manières. Si vous configurez plusieurs méthodes dans votre connexion JDBC, la priorité est la suivante : configuration des propriétés JDBC > configuration par fichier > configuration par URL.

Remarque
  • Dans la méthode de configuration par URL, concaténez plusieurs paramètres à l'aide du caractère esperluette (&).

  • Dans les trois méthodes de connexion, la MEK est traitée localement sur le client et distribuée en toute sécurité au serveur à l'aide du chiffrement sous enveloppe, ce qui empêche son exposition.

Propriétés JDBC

JDBC standard vous permet de configurer des attributs personnalisés dans un objet Properties lors de l'établissement d'une connexion. Par exemple :

// 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 ...

Fichier

Importez des paramètres tels que la MEK à partir d'un fichier de configuration. Pour ce faire, définissez la propriété encJdbcConfigFile sur le chemin d'accès au fichier. Si cette propriété n'est pas définie, le pilote utilise par défaut le fichier encjdbc.conf.

Le fichier de configuration contient les éléments suivants :

MEK=****

Placez le fichier de configuration à l'un des deux emplacements suivants :

  • Placez le fichier encjdbc.conf dans le répertoire resources de votre projet.

  • Placez le fichier dans le répertoire racine du projet, qui correspond au répertoire d'exécution de l'application.

Une fois la MEK configurée dans un fichier, aucun code supplémentaire n'est nécessaire. Par exemple :

// 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

Intégrez des paramètres tels que la MEK et ENC_ALGO dans l'URL. Par exemple :

// 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 ...

Exemple de code

Le code suivant présente un exemple complet de configuration de la MEK à l'aide de la configuration des propriétés JDBC. Avant d'exécuter ce code, assurez-vous que le chiffrement de colonne est configuré dans la base de données cible.

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.
    }
}