Criptografar ou descriptografar tabelas com instruções ALTER exige uma instrução separada por tabela, o que se torna impraticável em bancos de dados de grande porte. A extensão rds_tde_utils permite criptografar ou descriptografar múltiplas tabelas e índices de uma só vez — seja uma única tabela ou todas as tabelas de um banco de dados.
Pré-requisitos
Antes de começar, verifique se:
Sua instância RDS executa PostgreSQL 10 ou versão posterior
Sua instância RDS usa a versão secundária do mecanismo 20221030 ou posterior — consulte Atualizar a versão secundária do mecanismo de uma instância ApsaraDB RDS for MySQL
O Transparent Data Encryption (TDE) esteja ativado — consulte Ativar o TDE em uma instância ApsaraDB RDS for PostgreSQL e usar o TDE
Notas de uso
As operações de criptografia e descriptografia em lote são executadas de forma síncrona — a chamada retorna somente após o processamento de todas as tabelas e índices. Em bancos de dados com grande quantidade de tabelas, essas operações podem demorar bastante. Prossiga com cautela.
Instalar e remover a extensão
Execute as instruções a seguir com uma conta com privilégios.
Para instale a extensão:
CREATE EXTENSION rds_tde_utils;
Para remover a extensão:
DROP EXTENSION rds_tde_utils;
Referência de funções
A extensão oferece oito funções. Cada função opera em uma única tabela ou em todo o banco de dados, usando um de dois métodos de reescrita.
Escolha um método de reescrita
|
Método |
Comportamento |
|
Lazy |
A lógica de reescrita é semelhante ao LAZY VACUUM. |
|
Full |
A lógica de reescrita é semelhante ao VACUUM FULL. Não execute durante horários de pico. |
Funções de criptografia
|
Função |
Escopo |
Método |
|
|
Tabela única e seus índices |
Lazy |
|
|
Tabela única e seus índices |
Full |
|
|
Todas as tabelas e índices do banco de dados |
Lazy |
|
|
Todas as tabelas e índices do banco de dados |
Full |
Funções de descriptografia
|
Função |
Escopo |
Método |
|
|
Tabela única e seus índices |
Lazy |
|
|
Tabela única e seus índices |
Full |
|
|
Todas as tabelas e índices do banco de dados |
Lazy |
|
|
Todas as tabelas e índices do banco de dados |
Full |
Exemplos
Configurar tabelas de teste
CREATE TABLE table_a(id int);
CREATE INDEX index_a1 ON table_a(id);
CREATE INDEX index_a2 ON table_a USING hash(id);
CREATE TABLE table_b(id int);
CREATE INDEX index_b1 ON table_b(id);
CREATE INDEX index_b2 ON table_b USING hash(id);
Criptografar uma única tabela e seus índices
Use o método lazy para reduzir o impacto nas cargas de trabalho em execução:
SELECT rds_tde_lazy_encrypt_table('table_a'::regclass);
Use o método full em horários de baixo tráfego para uma reescrita completa da tabela:
SELECT rds_tde_encrypt_table('table_a'::regclass);
Criptografar todas as tabelas e índices do banco de dados
-- Lazy method (lower impact)
SELECT rds_tde_lazy_encrypt_database();
-- Full method (complete rewrite, run during off-peak hours)
SELECT rds_tde_encrypt_database();
Descriptografar uma única tabela e seus índices
-- Lazy method
SELECT rds_tde_lazy_decrypt_table('table_a'::regclass);
-- Full method (run during off-peak hours)
SELECT rds_tde_decrypt_table('table_a'::regclass);
Descriptografar todas as tabelas e índices do banco de dados
-- Lazy method (lower impact)
SELECT rds_tde_lazy_decrypt_database();
-- Full method (complete rewrite, run during off-peak hours)
SELECT rds_tde_decrypt_database();