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.
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
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.
-
Especifique a coluna
pancomo 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 valoresNULLnão são criptografados. -
Use a instrução
MODIFYpara 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;NotaNão é possível adicionar uma nova coluna criptografada diretamente. Use a instrução
MODIFYpara 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);
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
-
Ative o recurso TDE.
ImportanteA 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.
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.
No painel de navegação à esquerda, clique em Settings and Management > Security.
-
Na aba TDE Settings, ative a chave TDE Status e selecione uma chave personalizada.
NotaAntes 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.

-
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.
-
(Opcional) Execute a rotação de chaves.
NotaO 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; -
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:
|
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.