MySQL : droits d’accès root perdus ou supprimés par accident ! que faire ?


     2


Alaa-eddine

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.

 



 

A lire également

 
  • Ayoub

    J’ai déjà eu ce problème.

    J’ai utilisé la deuxième solution, mais à la place de modifier le mot de passe root j’ai crée un nouveau utilisateur avec les droits root.

    Cela permet d’éviter de modifier et mettre à jour, tous les logiciels qui utilise un accès root avec l’ancien mot de passe (même si c’est une mauvaise idée d’utiliser l’accès root pour des applications).

  • Alaa-eddine

    en effet en cas de perte du mot de passe, il faut faire attention à ne pas faire tomber les applications qui dépendent de la base MySQL en changeant le MDP root. Mais en général si on a accès à ces applications on peut récupérer le mot de passe root en regardant la conf d’une appli plutot que de procéder avec l’une des solutions que je décrits. ces dernières sont un ultime recours 😉