Réinitialiser le mot de passe administrateur de Drupal 9
En cas de perte des identifiants, il faut savoir que tous les comptes utilisateurs sont enregistrés dans les tables users / users_data / users_field_data.
Dans la table users, à chaque compte correspond un id unique (colonne UID).
Pour Drupal, les utilisateurs anonymes et privilégiés sont systématiquement les deux premières lignes de cette table et ont pour UID respectif 0 et 1.
Les mots de passe sont stockés dans la table users_field_data
Récupération du hash de votre nouveau mot de passe avant de pourvoir modifier la table :
En ligne de commande, se placer dans le répertoire racine de votre installation Drupal et lancer la commande suivante :
# php core/scripts/password-hash.sh 'mon_mot_de_passe' password: mon_mot_de_passe hash: $S$EE5DKUGqCd40t.MHuS4HBMkxk2e42xIFzQ5PUzUNSvWOrfoSKfzr On obtient le hash que l'on va pouvoir utiliser pour renseigner la table SQL
Pour changer identifiant et mot de passe, il suffit d’exécuter la requête SQL suivante avec la console MySQL ou PhpMyAdmin :
# mysql -u root -p
On sélectionne la base drupal :
MariaDB [(none)]> show databases;
+——————–+
| Database |
+——————–+
| drupal |
| information_schema |
| mysql |
| performance_schema |
+——————–+
4 rows in set (0.000 sec)MariaDB [(none)]> use drupal;
Visualisation de la table user_field_data qui contient les mots de passe des utilisateurs :
MariaDB [drupal]> Select * from users_field_data;
Le compte priviliégié est bien en uid=1
Modification du mot de passe :
MariaDB [drupal]> UPDATE users_field_data SET pass = ‘hash du nouveau_mot_de_passe‘ WHERE uid = 1;
Retour sur votre site Drupal et se connecter !
3 commentaires
dhumbert · 18 mars 2022 à 15 h 47 min
Les mots de passe en D9 ne sont pas le résultat de MD5 mais celui d’un hachage de type sha512 avec un salage aléatoire. En tout cas, sur mon site, qui n’est pas issu d’une migration de D7, votre procédé ne fonctionne pas. J’utilise une fonction de hashage identique à celle du core de drupal pour modifier le champ « pass » de la table « users_field_data »
Tpeltier · 18 mars 2022 à 16 h 02 min
Merci pour ces informations très pertinentes. Effectivement mon site D9 est une migration d’anciennes versions de Drupal, peut être pour cela que la procédure fonctionne.
Suite à vos remarques, je viens de faire quelques recherches et il existe un script dans core/scripts/password-hash.sh qui permet d’obtenir le hash de son mot de passe avant de modifier la table « users_field_data »
Je viens de modifier l’article en conséquence. Merci 😉
dhumbert · 18 mars 2022 à 17 h 43 min
J’ajouterai pour terminer qu’un nettoyage de la table « cache_entity » (ou plus grossièrement « vider tous les caches » ) s’impose souvent avant de pouvoir reconnecter l’utilisateur avec le nouveau mot de passe.