Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Uso del controlador de cifrado de columnas basado en JDBC

Última actualización: Sep 03, 2026

El controlador de cifrado de columnas basado en JDBC permite que las aplicaciones Java lean columnas cifradas en ApsaraDB RDS for PostgreSQL sin modificar la lógica de las consultas. Cuando se configura una clave maestra de cifrado (MEK) válida y la cuenta tiene el permiso de texto cifrado necesario, el controlador descifra automáticamente el texto cifrado y devuelve el texto sin formato.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • column encryption habilitado en su instancia de RDS

    Tras habilitar el cifrado de columnas, el sistema instala automáticamente la extensión rds_encdb . Ejecute la siguiente sentencia SQL para confirmar que la extensión está activa: `` sql SELECT EXISTS (SELECT * FROM pg_extension WHERE extname = 'rds_encdb'); ``
  • Los detalles de conexión de su instancia de RDS: endpoint, puerto, nombre de la base de datos, nombre de usuario y contraseña. Consulte Visualización y modificación de endpoints y números de puerto

  • El ciphertext permission (JDBC decryption) otorgado a la cuenta que usa para conectarse

  • JDK 1.8 o posterior

Aviso

Almacene su MEK de forma segura y manténgala confidencial. La instancia de RDS no genera, almacena, gestiona ni respalda su MEK. Si pierde la MEK, no podrá recuperar los datos cifrados existentes.

Funcionamiento

El controlador intercepta las llamadas JDBC y realiza el descifrado en el lado del cliente mediante su MEK. La MEK se distribuye al servidor mediante cifrado de sobre para garantizar que no se filtre.

Paso 1: Agregar la dependencia de Maven

Agregue la siguiente dependencia al archivo pom.xml de su proyecto Maven:

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

Paso 2: Configurar la URL de conexión y la MEK

El controlador requiere dos configuraciones:

Configuración

Formato/ejemplo

Descripción

URL

jdbc:postgresql:encdb://<host>:<port>/<dbname>

La URL debe comenzar con jdbc:postgresql:encdb://.

MEK

00112233445566778899aabbccddeeff

Cadena hexadecimal de 32 caracteres (16 bytes). Genérela con una herramienta como openssl rand -hex 16, una función aleatoria en su lenguaje de programación o un Key Management Service (KMS) de terceros.

Métodos de configuración de la MEK

Existen tres métodos disponibles. Cuando se usa más de uno, el controlador los aplica en el siguiente orden de prioridad:

  1. Configuración mediante propiedades JDBC (mayor prioridad)

  2. Configuración mediante archivo

  3. Configuración mediante URL (menor prioridad)

Configuración mediante propiedades JDBC (recomendado)

Pase la MEK como propiedad JDBC al crear la conexión:

String mek = "<your-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);

Configuración mediante archivo

Almacene la MEK en un archivo de configuración y refiriérala mediante la propiedad encJdbcConfigFile. Si no establece esta propiedad, el controlador busca encjdbc.conf de forma predeterminada.

Contenido del archivo de configuración:

MEK=<your-mek>

Coloque el archivo en cualquiera de las siguientes ubicaciones:

  • El directorio resources de su proyecto

  • El directorio raíz que usa la aplicación en tiempo de ejecución

Una vez colocado el archivo, no se requieren cambios adicionales en el código:

String dbUrl = String.format("jdbc:postgresql:encdb://%s:%s/%s", hostname, port, dbname);
Connection connection = DriverManager.getConnection(dbUrl, username, password);

Configuración mediante URL

Anexe la MEK directamente a la URL de conexión. Use & para concatenar varios parámetros:

String mek = "<your-mek>";

String dbUrl = String.format("jdbc:postgresql:encdb://%s:%s/%s?MEK=%s", hostname, port, dbname, mek);
Connection connection = DriverManager.getConnection(dbUrl, username, password);

Paso 3: Consultar datos cifrados

En el siguiente ejemplo se usa la configuración mediante propiedades JDBC para establecer la MEK.

Consulta de columnas cifradas

// Replace the placeholder values with your actual connection details.
String hostname = "pgm-****.pg.rds.aliyuncs.com";
String port     = "5432";
String dbname   = "testdb";
String username = "user";   // Must have the ciphertext permission (JDBC decryption).
String password = "password";
String mek      = "<your-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);

// Run a query. Encrypted columns are decrypted automatically.
ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM test_table");
while (rs.next()) {
    for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { // Column index starts from 1.
        System.out.print(rs.getString(i) + "\t");
    }
    System.out.println();
}

rs.close();
connection.close();

Problemas comunes

Se perdió la MEK. No es posible recuperar los datos cifrados sin la MEK. Respalde la MEK antes de cifrar cualquier dato.

La URL de conexión no comienza con jdbc:postgresql:encdb://. El controlador solo intercepta conexiones que usan el prefijo de URL encdb. Debe especificar una URL que comience con jdbc:postgresql:encdb://.

La cuenta no tiene el permiso de texto cifrado (descifrado JDBC). Las consultas a columnas cifradas devuelven un error. Otorgue el permiso como se describe en Use the column encryption feature.

Pasos siguientes

  • Column encryption: habilite el cifrado de columnas y gestione las columnas cifradas en su instancia de RDS