Table des matières
Perte du mot de passe de "user 1"
Sources :
- Resetting the administrator password with sql-query (drupal.org, en)
.
Procédure Drupal 7
Prérequis
- Si vous avez fait 5 tentatives consécutives avec un mauvais mot de passe, votre accès au site est probablement bloqué. Commencez par le débloquer : Déblocage d'une IP après 5 tentatives infructueuses.
- Avoir accès à un shell (terminal) sur le serveur (généralement, via ssh)
- Avoir accès la commande drush.
Si votre hébergement Drupal ne rempli pas ces prérequis1), il existe des échappatoires:
- Si votre accès shell (terminal) ne vous permet pas de lancer la commande drush : Passer la requête SQL sans drush
- Si vous n'avez même d'accès à un shell (terminal) : Pas d'accès shell
Pas à pas
- ouvrir un shell (un terminal) à la racine de l'arborescence de l'application (du site), généralement via ssh
- générer un mot de passe par la commande suivante :
php ./scripts/password-hash.sh mon-mdp
où mon-mdp est remplacé par le nouveau mot de passe souhaité
- en retour, votre mot de passe chiffré est affiché, ça ressemble à :
$S$CTo9G7Lx28rzCfpn4WB2hUlknDKv6QTqHaf82WLbhPT2K5TzKzML
- copier la chaîne de caractère renvoyée et la mettre de côté (attention à à bien prendre tous les caractères sans “attraper” d'espace avant ni après)
- mettre le site en maintenance (pas obligatoire mais recommandé) :
drush vset maintenance_mode 1
- mettre à jour le mot de passe, dans la base de données :
drush sqlq 'UPDATE users SET pass="$S$CTo9G7Lx28rzCfpn4WB2hUlknDKv6QTqHaf82WLbhPT2K5TzKzML" WHERE uid = 1;'
sans oublier de remplacer $S$CTo9G7… par la chaîne de caractères correspondant à votre mot de passe
- remettre le site en fonctionnement (selon étape 5)
drush vset maintenance_mode 0
Passer la requête SQL sans drush
Si vous ne disposez pas de drush, vous n'avez pas pu passer la commande cruciale de mise à jour du mot de passe : drush sqlq …
Heureusement, il existe plusieurs manières d'atteindre le même objectif. Quelques-unes sont présentées ci-après. Dans tous les cas, on souhaite passer la requête SQL suivante :
UPDATE users SET pass="$S$CTo9G7Lx28rzCfpn4WB2hUlknDKv6QTqHaf82WLbhPT2K5TzKzML" WHERE uid = 1;
où l'on aura pris soin de remplacer $S$CTo… par le mot de passe chiffré.
Virtualmin
- Edit Databases
- Manage (sur la ligne de la base voulue)
- Execute SQL
- saisir la requête SQL (sans oublier le “;” final !)
- cliquer sur Execute
Webmin
- Servers > MySQL Database Server
- cliquer sur la base voulue
- Execute SQL
- saisir la requête SQL (sans oublier le “;” final !)
- - cliquer sur Execute
PHPMyAdmin
- se connecter à sa base de données
- cliquer sur l'onglet SQL
- taper la requête SQL (sans oublier le “;” final !)
- cliquer sur Exécuter
En ligne de commande
mysql -udb-user -pdb-pwd -e 'UPDATE users SET pass="$S$CTo9G7Lx28rzCfpn4WB2hUlknDKv6QTqHaf82WLbhPT2K5TzKzML" WHERE uid = 1;' db-name
où vous aurez remplacé les 3 db-xxx par les valeurs appropriées et $S$CTo… par votre nouveau mot de passe chiffré.
Si vous avez oublié vos identifiants de base de données (les 3 db-xxx) :
cat sites/default/settings.php | grep -E "^.[^\*].*(database|username|password)"
Pas d'accès shell
Si vous ne disposez pas d'un accès à un shell (terminal) sur votre espace d'hébergement2), vous pouvez vous rabattre sur votre accès par FTP.
La procédure est décrite sur Drupal.org : Recovering the administrator password with a PHP file (Drupal7).