Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Criptografar colunas sensíveis usando a extensão rds_encdb

Última atualização: Jun 26, 2026

A extensão rds_encdb criptografa colunas específicas no nível do conjunto de resultados da consulta, sem exigir alterações no código da aplicação. Ao atribuir permissões por conta, você controla se cada conta de banco de dados visualiza as colunas criptografadas como texto simples ou texto cifrado nos resultados de consultas SELECT.

Importante

Atualmente, não há suporte para instalação manual direta da extensão rds_encdb. Para instalá-la, entre em contato conosco para obter autorização e siga as etapas descritas neste tópico.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Uma instância RDS executando PostgreSQL 16

  • Versão secundária do mecanismo da instância 20250228 ou posterior

Para atualizar a versão secundária do mecanismo, consulte Atualizar a versão secundária do mecanismo.

Casos de uso

Os casos de uso típicos incluem:

  • Criptografia dinâmica de dados: criptografe colunas específicas nos resultados de consultas para garantir que contas restritas sempre recebam texto cifrado.

  • Auditoria de conformidade: aplique políticas de acesso a dados na camada de banco de dados para atender a requisitos de auditoria.

  • Compartilhamento de dados com terceiros: compartilhe dados com partes externas mantendo as colunas sensíveis criptografadas.

Como funciona

A extensão rds_encdb usa uma tabela de metadados (rds_encdb.encryption_rule) para rastrear quais colunas devem ser criptografadas. Quando uma conta de banco de dados consulta uma tabela com regras de criptografia configuradas, a extensão intercepta o conjunto de resultados e retorna as colunas alvo como texto cifrado, a menos que a conta possua a permissão FULL ACCESS.

As permissões da conta funcionam da seguinte maneira:

Permissão

Resultado da consulta

FULL ACCESS

As colunas criptografadas aparecem como texto simples

RESTRICTED ACCESS (padrão)

As colunas criptografadas aparecem como texto cifrado; aparecem como texto simples quando acessadas via encjdbc

O algoritmo de criptografia é AES_256_GCM. As regras de criptografia entram em vigor imediatamente, inclusive para sessões existentes.

Instale a extensão

  1. Configure parâmetros da instância e defina o Running Parameter Value de rds_encdb.enable_encryption como on.

  2. Conecte-se ao banco de dados alvo usando uma conta privilegiada e execute a instrução a seguir. Para criar uma conta privilegiada, consulte Crie uma conta.

    Execute SELECT * FROM pg_extension; para verificar se a extensão está instalada.
    CREATE EXTENSION rds_encdb;

Configure criptografia e permissões de conta

Este tutorial aborda o fluxo de trabalho completo: criação de uma tabela, configuração de regras de criptografia de coluna, concessão de acesso total a uma conta e verificação dos resultados da consulta em cada etapa.

Etapa 1: Crie uma tabela de teste e inserir dados

Conecte-se como test_user e execute:

-- Connect as test_user
CREATE TABLE test(a text, b text, c text);
INSERT INTO test VALUES ('foo', 'bar', 'hello world');

Consulte a tabela. Neste momento, os resultados estão em texto simples:

SELECT * FROM test;
 a   |  b  |      c
-----+-----+-------------
 foo | bar | hello world
(1 row)

Etapa 2: Configure regras de criptografia de coluna

Conecte-se com a conta privilegiada (a conta que instalou a extensão rds_encdb) e insira registros na tabela de metadados rds_encdb.encryption_rule para criptografar as colunas a e b da tabela test:

-- Connect as privileged account
INSERT INTO rds_encdb.encryption_rule
VALUES
    (9, 'rule1', 'test', '1'),
    (10, 'rule1', 'test', '2');

A tabela rds_encdb.encryption_rule tem a seguinte estrutura:

Nome da coluna

Tipo

Descrição

id

int

Chave primária, ID de incremento automático

rule_name

name

Nome da regra de criptografia

attrelid

regclass

Tabela associada a esta regra. Deve satisfazer a restrição UNIQUE de (rule_name, attrelid, attnum)

attnum

smallint

Número ordinal da coluna na tabela

Para visualizar todas as regras configuradas agrupadas por (rule_name, table_name), consulte a view rds_encdb.rules:

SELECT * FROM rds_encdb.rules;
 rule_name | attrelid | attname_list
-----------+----------+--------------
 rule1     | test     | b,a
(1 row)

Etapa 3: Verifique se contas restritas veem texto cifrado

Conecte-se como test_user e consulte a tabela novamente. Como test_user tem a permissão padrão RESTRICTED ACCESS, as colunas a e b agora retornam como texto cifrado:

-- Connect as test_user
SELECT * FROM test;
                        a                          |                                b                                 |      c
------------------------------------------------------------------+------------------------------------------------------------------+-------------
 1yAZAAAACVyTxvBACK5JFw0w/ZU62Yt9btkv9bSN8TcJWOfXCiWVnCqnakSZCwI= | DSAZAAAACaSrnhi0usv3MiJsgRQKXA5xEArdALSdnFVjqD0nrd1s6ilShhw00EM= | hello world
(1 row)

Etapa 4: Conceder acesso total a uma conta

Conecte-se com a conta privilegiada e conceda FULL ACCESS ao usuário test_user com um tempo de expiração:

-- Connect as privileged account
SELECT rds_encdb.setup_encryption_role('test_user', 'FULL ACCESS', '2025-04-17 16:01:02.509447+00');

Para remover as permissões de criptografia de coluna de uma conta:

SELECT rds_encdb.remove_encryption_role('account');

As contas com permissões configuradas ficam registradas na tabela de metadados rds_encdb.encryption_role_auth:

Nome da coluna

Tipo

Descrição

role

regrole

Chave primária; nome de usuário associado a esta permissão de criptografia

role_type

char

r = RESTRICTED ACCESS; f = FULL ACCESS

salt

text

Chave da conta. Definida e gerada pelo cliente encjdbc durante a conexão

expire_time

timestamptz

Tempo de expiração da permissão. Após este horário, a permissão reverte para RESTRICTED ACCESS. Formato: YYYY-MM-DD HH:MM:SS.ssssss+/-TZ

Para visualizar as contas com permissões configuradas:

SELECT * FROM rds_encdb.encryption_role_auth;
   role    | role_type | salt |          expire_time
-----------+-----------+------+-------------------------------
 test_user | f         |      | 2025-04-18 00:01:02.509447+08
(1 row)

Etapa 5: Verifique se a conta agora vê texto simples

Conecte-se como test_user e consulte a tabela novamente:

-- Connect as test_user
SELECT * FROM test;
 a   |  b  |      c
-----+-----+-------------
 foo | bar | hello world
(1 row)

Agora, o usuário test_user visualiza as colunas criptografadas como texto simples.

Limitações

Atualmente, não há suporte para os seguintes recursos SQL:

  • Conjuntos de resultados de consulta retornados por funções

  • Consultas que não sejam SELECT, como operações de cursor e instruções PREPARE/EXECUTE

  • Common Table Expressions (CTEs) e cláusulas UNION

Próximos passos