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?
mysql
encryption
Snitse
fonte
fonte
Respostas:
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:
e SELECT:
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.
fonte
O MariaDB recentemente adicionou 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
O MySQL também suporta criptografia em nível de tabela para o InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html
fonte
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)
fonte