Lorsqu’un administrateur oublie le mot de passe d’un serveur MySQL ou MariaDB, il est possible de récupérer l’accès en suivant une procédure sécurisée. Cette méthode consiste à désactiver temporairement les contrôles d’autorisation afin de modifier directement les informations d’identification dans la base système.
Le processus décrit ici s’applique à MariaDB 5.5 sur CentOS 7.5, mais reste applicable à de nombreuses versions de MySQL et MariaDB.
Étape 1 : Désactiver les tables de gestion des privilèges
Modifier le fichier de configuration du serveur pour ajouter l’option skip-grant-tables, qui permet de se connecter sans authentification.
[mysqld]
skip-grant-tables
Ce paramètre doit être ajouté dans /etc/my.cnf.d/server.cnf, sous la section [mysqld].
Étape 2 : Redémarrer le service MariaDB
systemctl restart mariadb
Étape 3 : Se connecter sans mot de passe
Une fois le redémarrage effectué, il est désormais possible de se connecter en tant qu’utilisateur root sans fournir de mot de pase :
mysql -uroot
La connexion s’établit immédiatement, avec un accès complet au système.
Étape 4 : Mettre à jour le mot de passe via une requête directe
Les commandes classiques comme GRANT ou SET PASSWORD ne fonctionnent pas danns ce mode, car elles sont bloquées par l’option --skip-grant-tables. Il faut donc utiliser une requête SQL directe sur la table user du schéma système mysql.
USE mysql;
UPDATE user
SET password = PASSWORD('nouveau_mot_de_passe')
WHERE user = 'root';
Cette commande met à jour le mot de passe pour l’utilisateur root sur l’hôte localhost. Le nombre de lignes affectées indique combien d’enregistrements ont été modifiés.
Étape 5 : Supprimer l’option de configuraton
Après la modification du mot de passe, il est crucial de retirer l’option skip-grant-tables du fichier de configuration pour rétablir la sécurité du système.
Ouvrir le fichier :
vim /etc/my.cnf.d/server.cnf
Et commenter ou supprimer la ligne :
# skip-grant-tables
Étape 6 : Redémarrer le service
systemctl restart mariadb
Étape 7 : Vérifier la connexion avec le nouveau mot de passe
Tenter de se connecter sans mot de passe échoue maintenant, comme prévu :
mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Se connecter avec le nouveau mot de passe fonctionne correctement :
mysql -uroot -p'nouveau_mot_de_passe'
Une fois connecté, le système fonctionne normalement avec les contrôles d’authentification activés.