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?
AES minimal au niveau du champ et cryptage DES 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';
De plus, cela nécessite une connexion SSL à la base de données.
Et à un niveau inférieur - vous pouvez également crypter le système de fichiers.
MariaDB a récemment ajouté un chiffrement au niveau de la table pour les tables InnoDB et XtraDB. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt
MySQL prend également en charge le chiffrement au niveau de la table pour InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html
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] sont 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)