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

20

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 garantir que ninguém que tenha 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 tiver acesso root à máquina, mas não tiver uma chave de descriptografia, não poderá ler os dados.

Como devo fazer isso? Faz sentido fazer? Estou preocupado 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?

Snitse
fonte
5
Você já pensou em armazenar o banco de dados em um volume dedicado e criptografá-lo com dm-crypt e LUKS? Claro, não é o que você está perguntando, mas tudo será criptografado. Você pode até criptografar o arquivo de chave com o GPG.
dsljanus

Respostas:

10

A criptografia mínima de AES e DES no 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á-los aos gatilhos / procedimentos).

exemplo:

INSERIR:

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

e SELECT:

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

Além disso, isso requer conexão SSL com o banco de dados.

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

GioMac
fonte
2
Nota: A menos que o banco de dados seja local, é necessário criptografar a conexão de alguma forma ou a senha e a chave serão enviadas como texto sem formatação pela rede. Consulte security.stackexchange.com/questions/45838/…
Aaron Digulla
AES, MD5 é antigo e tem explorações. o que são novas criptografias?
YumYumYum
Eu sei que este é apenas um exemplo de como criptografar / descriptografar um campo, mas usar a senha como exemplo é uma má ideia. Você nunca deve ter senhas unidas em seu banco de dados com ou sem criptografia.
Caedmon 30/06
Esta resposta é sobre descriptografia no nível de campo, mas a questão não é sobre isso: "uma boa maneira de criptografar um banco de dados mysql" ... "Eu sei que posso criptografar campos específicos de um banco de dados, mas estou interessado em criptografar todos os campo do banco de dados ".
LarsH
2

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

A seguir: 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 fonte do aplicativo.

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

Daniel Widrick
fonte