Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Encrypt sensitive columns using the rds_encdb extension

Última atualização: Sep 24, 2026

A extensão rds_encdb criptografa colunas específicas no nível do conjunto de resultados da consulta, sem necessidade de alterar o 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

No momento, não há suporte para a instalação manual direta da extensão rds_encdb. Para instalá-la por conta própria, entre em contato conosco para obter autorização e, em seguida, siga os passos descritos 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 20250228 ou posterior

Para atualizar a versão secundária do mecanismo, consulte Upgrade the minor engine version.

Casos de uso

Entre os casos de uso típicos estão:

  • Criptografia dinâmica de dados: criptografa colunas específicas nos resultados das consultas, garantindo que contas restritas sempre recebam texto cifrado.

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

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

Como funciona

A extensão rds_encdb utiliza 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 permissão FULL ACCESS.

As permissões de conta funcionam da seguinte forma:

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; exibidas como texto simples quando acessadas via encjdbc

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

Instale a extensão

  1. Configure instance parameters e defina o Running Parameter Value de rds_encdb.enable_encryption como on.

  2. Conecte-se ao banco de dados de destino com uma conta privilegiada e execute a instrução a seguir. Para crie uma conta privilegiada, consulte Create an account.

    Execute SELECT * FROM pg_extension; para verifique se a extensão foi instalada.
    CREATE EXTENSION rds_encdb;

Configure criptografia e permissões de conta

O passo a passo a seguir abrange todo o fluxo de trabalho: criação de uma tabela, configuração de regras de criptografia de colunas, concessão de acesso completo 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 aparecem em texto simples:

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

Etapa 2: Configure regras de criptografia de colunas

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 possui a seguinte estrutura:

Nome da coluna

Tipo

Descrição

id

int

Chave primária, ID com autoincremento

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 visualize todas as regras configuradas, agregadas 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 possui a permissão padrão RESTRICTED ACCESS, as colunas a e b agora são retornadas como texto cifrado:

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

Etapa 4: Conceder acesso completo a uma conta

Conecte-se com a conta privilegiada e conceda a test_user a permissão FULL ACCESS 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 colunas criptografadas de uma conta:

SELECT rds_encdb.remove_encryption_role('account');

O sistema registra as contas com permissões configuradas 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 na conexão

expire_time

timestamptz

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

Para visualize 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, test_user visualiza as colunas criptografadas como texto simples.

Limitações

Os seguintes recursos SQL não têm suporte atualmente:

  • Conjuntos de resultados 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