¿Cuál es una buena forma de cifrar una base de datos MySQL? ¿Vale la pena?

¿Cuál es una buena forma de cifrar una base de datos MySQL? ¿Vale la pena?

Sé que puedo cifrar campos concretos de una base de datos, pero me interesa cifrar todos los campos de la base de datos. Quiero asegurarme de que nadie que obtenga 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 obtuvo acceso root a la máquina, pero no tenía una clave de descifrado, no pueda leer los datos.

¿Cómo debería hacer esto? ¿Tiene sentido hacerlo? 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?

Respuesta1

Está disponible un cifrado AES y DES mínimo a nivel de campo: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 agregarla a los activadores/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';

También estorequiereConexión SSL a la base de datos.

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

Respuesta2

MariaDB agregó recientemente cifrado a nivel de tabla para tablas InnoDB y XtraDB. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#especificando-qué-tablas-para-cifrar

MySQL también admite cifrado a nivel de tabla para InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html

Respuesta3

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

A continuación: asegúrese de que la instancia de MySQL y la aplicación [servidor] estén en máquinas separadas para que un compromiso de 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 correctamente los datos confidenciales (contraseñas, tarjetas de crédito, etc.), pero cifrarlo todo es excesivo. (Y probablemente contraproducente en el mundo de las claves primarias)

información relacionada