Qual é uma boa maneira de criptografar um banco de dados MySQL e vale a pena?

Qual é uma boa maneira de criptografar um banco de dados MySQL e vale a pena?

Sei que posso criptografar campos específicos de um banco de dados, mas estou interessado em criptografar todos os campos do banco de dados. Quero ter certeza de que ninguém que obtenha acesso a um shell mysql, mas que não tenha acesso a uma chave de descriptografia, não consiga ler nada do banco de dados.

Também quero ter certeza de que, se alguém obtivesse acesso root à máquina, mas não tivesse uma chave de descriptografia, não conseguiria ler os dados.

Como devo fazer isso? Faz sentido fazer isso? Estou preocupado que se alguém tiver acesso ao banco de dados mysql, inevitavelmente terá acesso à chave, então isso não faz sentido. Estou esquecendo de algo?

Responder1

A criptografia mínima AES e DES em nível de campo está disponível:https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

Ninguém pode ler dados sem especificar a chave para cada consulta (ou sem adicioná-la aos gatilhos/procedimentos).

exemplo:

INSERIR:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));

e SELECIONE:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

Além disso, issorequerConexão SSL com o banco de dados.

E no nível inferior - você também pode criptografar o sistema de arquivos.

Responder2

MariaDB adicionou recentemente criptografia em nível de tabela para tabelas InnoDB e XtraDB. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt

MySQL também suporta criptografia em nível de tabela para InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html

Responder3

Primeiro: você armazena sua chave com o aplicativo e gerencia toda a criptografia na camada do aplicativo.

Próximo: você garante que a instância do MySQL e o aplicativo [servidor] estejam em máquinas separadas para que um comprometimento raiz no servidor MySQL não permita que o invasor leia a chave da origem do aplicativo.

Esta abordagem parece excessiva. Lide com dados confidenciais de maneira adequada (senhas, cartões de crédito, etc.), mas criptografar tudo é um exagero. (E provavelmente contraproducente no mundo das chaves primárias)

informação relacionada