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?
mysql
encryption
Snitse
fuente
fuente
Respuestas:
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:
y SELECCIONAR:
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.
fuente
MariaDB agregó recientemente el cifrado a nivel de tabla para las tablas InnoDB y XtraDB. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt
MySQL también es compatible con el cifrado a nivel de tabla para InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html
fuente
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)
fuente