MySQL : droits d’accès root perdus ou supprimés par accident ! que faire ?
Voici un petit billet que je mets en ligne pour partager mon expérience sur une question qui m’a été posée il y a quelque jours par un ami.
Ce dernier venait de faire des manipulations dans ces bases MySQL qui lui ont fait perdre le droit d’accès root à la base de donnée ! n’ayant moi-même jamais rencontré ce cas je n’avais d’autre solution que de me pencher sur la doc MySQL et sur des mailing list et forums de discussion.
J’ai fini par trouver deux solutions
Avant d’utiliser n’importe laquelle de ces solutions, assurez vous de couper tut accès extérieur à votre serveur MySQL (bloquez les connexions externes).
Ces solutions supposent que le nom de l’administrateur MySQL est : root , dans certaines distribution ce nom peut être différent !
Solution 1
Arrêtez votre serveur MySQL
Démarrez le serveur MySQL avec le paramètre de ligne de commande –skip-grant-tables : attention ce paramètre permet d’ignorer tous les privilèges de toutes les tables !
Connectez-vous avec votre compte root sans donner de mot de passe
Effectuez les opérations que vous souhaitez : mettre à jours les droits d’accès root, changer son mot de passe …etc
Arrêtez le serveur MySQL et le relancer en mode normal
Vérifiez que vous avez récupéré vos droits
Solution 2
Créez un fichier init.sql contenant les commandes SQL à executer pour récupérer votre accès, par exemple si vous souhaitez réinitialiser le mot de passe root mettez la ligne suivante dans le fichier :
UPDATE mysql.user SET Password=PASSWORD('votre_nouveau_password') WHERE User='root';
Si c’est pour redonner des privilèges à l’utilisateur root ajoutez les lignes :
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'votre_password_root' WITH GRANT OPTION ;
FLUSH PRIVILEGES;
Arrêtez votre serveur MySQL
Démarrez le serveur mysql en safemode et en lui passant le fichier init.sql comme script d’initialisation comme suit : mysqld_safe –init-file=/chemin/vers/init.sql
Arrêtez le serveur MySQL puis relancez le normalement.
Quelque soit votre distribution/OS l’une de ces deux solution devrait régler le problème, prenez juste garde à relancer le serveur en mode normal après avoir effectué l’une de ces deux opération autrement votre serveur sera très vulnérable, une simple injecion SQL pourra donner un accès root à un utilisateur mal intentionné sur votre serveur MySQL !
ce type d’opération est destiné à des utilisateurs/admins qui savent ce qu’ils font, si vous ne comprennez pas une étape des solutions décrites confiez la tâche à un utilisateur averti.