Quel est un bon moyen de crypter une base de données mysql, et ça vaut le coup?

20

Je sais que je peux crypter des champs particuliers d'une base de données, mais je suis intéressé à crypter chaque champ de la base de données. Je veux m'assurer que personne qui accède à un shell mysql mais qui n'a pas accès à une clé de déchiffrement ne puisse rien lire de la base de données.

Je veux également m'assurer que si quelqu'un a un accès root à la machine, mais n'a pas de clé de déchiffrement, il ne peut pas lire les données.

Comment dois-je procéder? Est-il sensé de le faire? Je suis inquiet si quelqu'un a accès à la base de données mysql, il aura inévitablement accès à la clé, donc cela n'a aucun sens. Suis-je en train de manquer quelque chose?

Snitse
la source
5
Avez-vous envisagé de stocker la base de données sur un volume dédié et de la crypter avec dm-crypt et LUKS? Bien sûr, ce n'est pas ce que vous demandez, mais tout sera crypté. Vous pouvez même crypter le fichier de clés avec GPG.
dsljanus

Réponses:

10

Un cryptage AES et DES minimal au niveau du champ est disponible: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

Personne ne peut lire les données sans spécifier de clé pour chaque requête (ou sans les ajouter aux déclencheurs / procédures).

exemple:

INSÉRER:

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

et SELECT:

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

Cela nécessite également une connexion SSL à la base de données.

Et à un niveau inférieur - vous pouvez également chiffrer le système de fichiers.

GioMac
la source
2
Remarque: Sauf si la base de données est locale, vous devez crypter la connexion d'une manière ou d'une autre ou le mot de passe et la clé seront envoyés en texte brut sur le réseau. Voir security.stackexchange.com/questions/45838/…
Aaron Digulla
AES, MD5 est vieux et a des exploits. qu'est-ce que les nouveaux cryptages?
YumYumYum
Je sais que ce n'est qu'un exemple de la façon de crypter / décrypter un champ mais utiliser le mot de passe comme exemple est une mauvaise idée. Vous ne devriez jamais avoir de mots de passe non hachés dans votre base de données avec ou sans cryptage.
Caedmon
Cette réponse concerne le décryptage au niveau du champ, mais la question n'est pas à ce sujet: "un bon moyen de crypter une base de données mysql" ... "Je sais que je peux crypter des champs particuliers d'une base de données, mais je suis intéressé à crypter chaque domaine de la base de données. "
LarsH
2

Premièrement: vous stockez votre clé avec l'application et gérez tout le cryptage au niveau de la couche application.

Ensuite: vous vous assurez que l'instance MySQL et l'application [serveur] se trouvent sur des machines distinctes afin qu'un compromis racine sur le serveur MySQL ne permette pas à l'attaquant de lire la clé depuis la source de l'application.

Cette approche semble excessive. Gérez correctement les données sensibles (mots de passe, cartes de crédit, etc.), mais tout chiffrer est exagéré. (Et probablement contre-productif dans le monde des clés primaires)

Daniel Widrick
la source