Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Driver de criptografia de colunas (JDBC)

Última atualização: Jun 26, 2026

Use o driver de criptografia de colunas da Alibaba Cloud (JDBC) para acessar dados criptografados no banco de dados a partir de uma aplicação Java. O driver utiliza uma chave mestra de criptografia (MEK) válida para descriptografar automaticamente o texto cifrado em texto simples, de forma transparente.

Pré-requisitos

  • A criptografia de colunas deve estar ativada. Para mais informações, consulte Criptografia de colunas.

    Nota

    Ao ativar a criptografia de colunas, a extensão rds_encdb é instalada por padrão no banco de dados de destino. Execute a seguinte instrução SQL para verificar o status da extensão rds_encdb: SELECT EXISTS (SELECT * FROM pg_extension WHERE extname = 'rds_encdb');

  • Tenha as informações de conexão do banco de dados criptografado, incluindo hostname, porta, nome do banco de dados, nome de usuário e senha. Para saber como obter o endpoint interno ou público de uma instância, consulte Visualizar e alterar os endpoints e números de porta.

  • O usuário do banco de dados precisa ter a ciphertext permission (JDBC decryption) para criptografia de colunas. Para mais detalhes, consulte Criptografia de colunas.

Notas de uso

  • Armazene a MEK com segurança.

  • Use o JDK 1.8 ou versão superior.

Procedimento

Nota

Este tópico usa um projeto Java baseado em Maven como exemplo.

Etapa 1: Configure a dependência do Maven

Adicione a seguinte dependência ao arquivo pom.xml do seu projeto Maven.

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

Etapa 2: Configure URL e MEK

Antes de acessar dados criptografados via JDBC, configure parâmetros como a MEK e a URL.

Parâmetro

Exemplo

Descrição

MEK

00112233445566778899aabbccddeeff

Chave mestra de criptografia definida pelo usuário.

  • Gere uma chave usando ferramentas como openssl rand -hex 16, funções aleatórias de linguagens de programação ou obtenha-a de um Key Management Service (KMS) de terceiros.

  • Intervalo de valores: string hexadecimal de 16 bytes (32 caracteres).

Aviso

Por questões de segurança, o banco de dados não armazena, gerencia, gera nem faz backup da sua MEK. Você é responsável pela geração e pelo backup da chave. A perda da MEK resulta na perda permanente do acesso aos seus dados criptografados.

URL

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

Para usar o driver de criptografia de colunas, altere o prefixo da URL para jdbc:postgresql:encdb://.

Configure a MEK

É possível configurar a MEK de três formas. Se você configurar mais de um método na conexão JDBC, a prioridade será: Configuração via JDBC Properties > Configuração via Arquivo > Configuração via URL.

Nota
  • No método de configuração via URL, concatene vários parâmetros usando o caractere "e" comercial (&).

  • Em todos os três métodos de conexão, a MEK é processada localmente no cliente e distribuída com segurança ao servidor por meio de criptografia de envelope, o que evita sua exposição.

JDBC properties

O JDBC padrão permite configurar atributos personalizados em um objeto Properties ao estabelecer uma conexão. Exemplo:

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

File

Importe parâmetros como a MEK de um arquivo de configuração. Para isso, defina a propriedade encJdbcConfigFile com o caminho do arquivo. Caso essa propriedade não seja definida, o driver usará o arquivo encjdbc.conf por padrão.

O arquivo de configuração contém o seguinte:

MEK=****

Salve o arquivo de configuração em um dos dois locais abaixo:

  • Salve o arquivo encjdbc.conf no diretório resources do seu projeto.

  • Salve o arquivo no diretório raiz do projeto, que corresponde ao diretório de execução da aplicação.

Após configurar a MEK em um arquivo, nenhum código adicional é necessário. Exemplo:

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

Incorpore parâmetros como MEK e ENC_ALGO diretamente na URL. Exemplo:

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

Exemplo de código

O código a seguir apresenta um exemplo completo de configuração da MEK usando JDBC Properties. Antes de executar este código, certifique-se de que a criptografia de colunas esteja configurada no banco de dados de destino.

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