¿Cuál es una buena manera de cifrar una base de datos mysql, y vale la pena?

20

Sé que puedo encriptar campos particulares de una base de datos, pero estoy interesado en encriptar cada campo de la base de datos. Quiero asegurarme de que nadie que tenga acceso a un shell mysql pero que no tenga acceso a una clave de descifrado no pueda leer nada de la base de datos.

También quiero asegurarme de que si alguien tiene acceso de root a la máquina, pero no tiene una clave de descifrado, no puede leer los datos.

¿Cómo debería hacer esto? ¿Tiene sentido hacer? Me preocupa que si alguien tiene acceso a la base de datos mysql, inevitablemente tendrá acceso a la clave, por lo que esto no tiene sentido. ¿Me estoy perdiendo de algo?

Snitse
fuente
55
¿Ha considerado almacenar el DB en un volumen dedicado y cifrarlo con dm-crypt y LUKS? Claro, no es lo que estás preguntando, pero todo estará encriptado. Incluso podría cifrar el archivo de claves con GPG.
dsljanus

Respuestas:

10

El cifrado AES y DES mínimo a nivel de campo está disponible: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

Nadie puede leer datos sin especificar la clave para cada consulta (o sin agregarlos a los desencadenantes / procedimientos).

ejemplo:

INSERTAR:

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

y SELECCIONAR:

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

Además, esto requiere una conexión SSL a la base de datos.

Y en el nivel inferior, también puede cifrar el sistema de archivos.

GioMac
fuente
2
Nota: A menos que la base de datos sea local, debe cifrar la conexión de alguna manera o la contraseña y la clave se enviarán como texto sin formato a través de la red. Ver security.stackexchange.com/questions/45838/…
Aaron Digulla
AES, MD5 es viejo y tiene vulnerabilidades. ¿Qué son los nuevos cifrados?
YumYumYum
Sé que esto es solo un ejemplo de cómo cifrar / descifrar un campo, pero usar la contraseña como ejemplo es una mala idea. Nunca debe tener contraseñas sin usar en su base de datos con o sin cifrado.
Caedmon
Esta respuesta es sobre el descifrado a nivel de campo, pero la pregunta no es sobre eso: "una buena forma de cifrar una base de datos mysql" ... "Sé que puedo cifrar campos particulares de una base de datos, pero estoy interesado en cifrar cada campo de la base de datos ".
LarsH
2

Primero: almacena su clave con la aplicación y maneja todo el cifrado en la capa de aplicación.

A continuación: se asegura de que la instancia de MySQL y la aplicación [servidor] estén en máquinas separadas para que un compromiso raíz en el servidor MySQL no permita que el atacante lea la clave del origen de la aplicación.

Este enfoque parece excesivo. Maneje los datos confidenciales adecuadamente (contraseñas, tarjetas de crédito, etc.) pero cifrar todo es excesivo. (Y probablemente contraproducente en el mundo de las claves primarias)

Daniel Widrick
fuente