Todos os produtos
Search
Central de documentação

PolarDB:Criptografia de colunas

Última atualização: Aug 27, 2026

O PolarDB permite criptografar dados em colunas específicas. Ao acessar os dados, use uma função de descriptografia para recuperar o texto simples, o que aumenta a segurança das informações.

Nota

O recurso de criptografia de colunas está em disponibilidade limitada; portanto, seus parâmetros ficam ocultos por padrão. Para ativar esse recurso, acesse o Quota Center, localize a cota pelo Quota ID polardb_mysql_column_encryption e clique em Apply na coluna Actions.

Requisitos de versão

Este recurso está disponível apenas para o PolarDB for MySQL 8.0.2, versão 8.0.2.2.30 ou posterior.

Contexto

Em versões anteriores, o PolarDB for MySQL usava funções de criptografia como aes_encrypt para criptografar dados no nível de campo. No entanto, essa abordagem exigia gerenciar chaves, lidar com a rotação de chaves e controlar as permissões de acesso no lado do cliente. O recurso de criptografia de colunas do PolarDB for MySQL integra essas operações ao servidor de banco de dados. Basta definir o atributo de criptografia para as colunas que deseja proteger. Além disso, a criptografia de colunas usa Online DDL para executar a rotação de chaves sem bloqueios.

Limitações

Impacto no desempenho

  • Desempenho de gravação

    O uso da criptografia de colunas gera sobrecarga de desempenho. Com o binary log desativado, a criptografia de colunas adiciona aproximadamente 3% de sobrecarga às inserções de thread única. Essa sobrecarga é menor quando o binary log está ativado ou se a tabela possui uma estrutura de linha ampla, devido a alterações nos padrões de I/O do sistema e na alocação de recursos.

  • Desempenho de leitura

    A sobrecarga no desempenho de leitura depende do uso de uma função de descriptografia na consulta. Uma única chamada de função de descriptografia em uma instrução SQL pode degradar o desempenho em aproximadamente 6%.

Uso de índice

Apenas consultas pontuais podem usar um índice para recuperação eficiente. Operações como consulta de intervalo (por exemplo, WHERE age>20) e correspondência de padrões (por exemplo, LIKE '%key%') não utilizam índice e resultam em uma varredura completa da tabela.

Limitações de propriedades da tabela

  • Não há suporte para criptografia em tabelas que contêm uma coluna virtual.

  • Somente tabelas que usam o mecanismo de armazenamento InnoDB são suportadas.

  • Tabelas particionadas não são suportadas.

  • As colunas criptografadas devem ser do tipo varbinary.

  • O comprimento da coluna deve ter pelo menos 44 bytes.

  • Não é possível adicionar uma nova coluna criptografada diretamente. Modifique uma coluna existente e não criptografada para criptografá-la.

Uso

Nota

Tanto a criptografia de colunas quanto o recurso TDE usam o Key Management Service (KMS) para gerenciamento de chaves.

1. Sintaxe (controle de permissão, DDL e DML)

Controle de permissão

Para usar a criptografia de colunas, sua conta de banco de dados deve ter o privilégio ENCRYPTION_FUN_ADMIN. Um privileged account pode conceder esse privilégio.

-- Grant the privilege
GRANT ENCRYPTION_FUN_ADMIN ON *.* TO 'testman'@'%';
-- View privileges
SHOW GRANTS;

DDL

Criar uma coluna criptografada

Use a palavra-chave ENCRYPTION para especificar uma coluna criptografada.

  1. Especifique a coluna pan como uma coluna criptografada.

    USE mydatabase;
    CREATE TABLE IF NOT EXISTS `my_pan` (
        `id` INT NOT NULL AUTO_INCREMENT,
        `pan` VARBINARY(128) NOT NULL ENCRYPTION,
        `desc` blob Default NULL,
        KEY `idx_pan` (`pan`),
        PRIMARY KEY (`id`)
    );
    Nota

    É possível criar uma coluna criptografada com valor padrão NULL, mas valores NULL não são criptografados.

  2. Use a instrução MODIFY para converter uma coluna comum em uma coluna criptografada, ou vice-versa.

    ALTER TABLE my_pan MODIFY `pan` VARBINARY(128) ENCRYPTION;
    ALTER TABLE my_pan MODIFY `pan` VARBINARY(128) NOT ENCRYPTION;
    Nota

    Não é possível adicionar uma nova coluna criptografada diretamente. Use a instrução MODIFY para converter uma coluna comum existente.

Criar um índice

A criação de um índice em uma coluna criptografada usa a mesma sintaxe de uma coluna comum.

CREATE index idx_pan ON my_pan(pan);
Nota

Os dados no índice são criptografados. O próprio índice é classificado com base na ordem dos valores do texto cifrado.

DML

As funções de criptografia e descriptografia são:

-- Encryption function
enhanced_aes_encrypt(data, db_name, table_name)
-- Decryption function
enhanced_aes_decrypt(data)

Inserir dados

Os dados inseridos em uma coluna criptografada são criptografados automaticamente, portanto, não é necessário chamar a função enhanced_aes_encrypt.

INSERT INTO `my_pan` VALUES(1,"my_passwd", "aaa");

Consultar dados

# 1. Query by decrypting column values. This does not use an index and performs a full table scan.
SELECT id,enhanced_aes_decrypt(pan) FROM `my_pan` WHERE enhanced_aes_decrypt(pan) = 'my_password_10';
# 2. Point query using an index. The result is returned as plaintext.
SELECT id,enhanced_aes_decrypt(pan) FROM `my_pan` WHERE pan = enhanced_aes_encrypt('my_password_10', "mydatabase", "my_pan");
# 3. Point query using an index. The result is returned as ciphertext.
SELECT id, pan FROM `my_pan` WHERE pan = enhanced_aes_encrypt('my_password_10', "mydatabase", "my_pan");

Atualizar dados

# Update data by using the primary key index.
UPDATE `my_pan` SET pan='new6-password', DESC='Senior6' WHERE id = 1;
# Update data by using the index on the encrypted column.
UPDATE `my_pan` SET pan='new6-password', DESC='Senior6' WHERE pan=enhanced_aes_encrypt('my_password_6', "mydatabase", "my_pan");

Excluir dados

# Delete data by using the primary key index.
DELETE FROM `my_pan` WHERE id = 1;
# Delete data by using the index on the encrypted column.
DELETE FROM `my_pan` WHERE pan = enhanced_aes_encrypt('my_password_2', "mydatabase", "my_pan");

2. Gerenciamento de chaves

  1. Authorize PolarDB to access KMS.

  2. Ative o recurso TDE.

    Importante
    • A ativação do TDE reinicia o cluster PolarDB. Proceda com cautela.

    • O TDE não pode ser desativado após a ativação.

    • A ativação do recurso Enabling the TDE feature em si não causa sobrecarga adicional de desempenho em tabelas que não são criptografadas por TDE e não contêm colunas criptografadas.

    1. Faça login no console do PolarDB. No painel de navegação à esquerda, clique em Clusters. Selecione a região do seu cluster e clique no ID do cluster para abrir sua página de detalhes.

    2. No painel de navegação à esquerda, clique em Settings and Management > Security.

    3. Na aba TDE Settings, ative a chave TDE Status e selecione uma chave personalizada.

      Nota

      Antes de excluir uma chave no KMS, certifique-se de que ela não esteja mais associada a nenhuma tabela criptografada, incluindo tabelas em backups históricos. Caso contrário, o cluster PolarDB poderá falhar ao reiniciar.

      image.png

  3. Selecione uma chave. Escolha entre Use Default Key CMK ou Use Existing Custom Key.

    Nas opções Advanced, é possível ativar a criptografia automática. Se ativada, todas as novas tabelas serão criptografadas automaticamente.

  4. (Opcional) Execute a rotação de chaves.

    Nota
    • O PolarDB não rotaciona chaves personalizadas automaticamente. É necessária a rotação manual da chave. Para mais informações, consulte Key rotation.

    • Após a rotação da chave, novas tabelas criptografadas usam a nova chave. Os dados nas tabelas criptografadas existentes permanecem criptografados com a chave original.

    • A rotação de dados envolve descriptografar os dados de uma tabela e recriptografá-los com a versão mais recente da chave. Esse processo consome recursos de CPU e I/O. A rotação de dados não é obrigatória, mas garanta a disponibilidade das chaves usadas pelas suas tabelas.

    • Bloqueio de tabela durante a rotação de dados:

      • Se o Online Copy estiver desativado, a tabela será bloqueada durante a rotação de dados.

      • Se o Online Copy DDL estiver ativado, a tabela não será bloqueada durante a rotação de dados. Operações DML simultâneas são permitidas, mas operações DDL simultâneas não.

    Para recriptografar dados em uma tabela criptografada existente com a nova chave, execute manualmente o seguinte comando de rotação de dados:

    ALTER TABLE <table_name> engine = innodb,algorithm=copy;
  5. Consulte as chaves da tabela.

    Para consultar informações de chaves de todas as tabelas criptografadas no sistema, execute a seguinte instrução SQL:

    SELECT * FROM information_schema.INNODB_COLUMN_ENCRYPTED_TABLE;

3. Configurações de parâmetro

Ative o recurso de criptografia de colunas definindo o parâmetro loose_polar_enable_column_encryption. Para mais informações sobre como definir parâmetros, consulte Set cluster and node parameters. A tabela a seguir descreve o parâmetro.

Parâmetro

Descrição

loose_polar_enable_column_encryption

Controla se a criptografia de colunas deve ser ativada. Valores válidos:

  • ON: Ativa o recurso de criptografia de colunas.

  • OFF (Padrão): Desativa o recurso de criptografia de colunas.

4. (Opcional) Ativar Online Copy

Ao usar a sintaxe COPY DDL para rotação de dados (por exemplo, para alterar definições de tabela entre mecanismos de armazenamento, ajustar propriedades de coluna ou converter entre tabelas comuns e particionadas), a tabela é bloqueada por padrão, o que pode interromper serviços. Para evitar isso, ative o recurso de otimização Online Copy DDL para realizar alterações na estrutura da tabela sem bloqueio ou com bloqueio mínimo. Para mais informações, consulte a documentação do Online Copy DDL.