Yann "Bug" Dubois

Développeur WordPress freelance à Paris
Flux RSS

Créer ou récupérer un accès administrateur à WordPress avec MySql

16 June 2011 Par : Yann Dubois Catégorie : WordPress

C’est un problème assez courant sur les forums d’entraide WordPress : l’administrateur d’un site n’arrive plus à y accéder soit parce qu’il a oublié son mot de passe, soit parce que son site a été piraté, ou suite à une erreur technique. Si le site ne fonctionne plus, il n’y a pas moyen de récupérer le mot de passe d’administration par e-mail, et parfois on n’a plus accès à l’adresse e-mail indiquée lors de la création du site. Pour moi qui interviens régulièrement sur les sites WordPress de tiers, la technique décrite ici est une façon rapide de prendre la main sur l’interface d’administration quand mon client m’a donné l’accès à son serveur. Car il est très simple de se recréer un accès administrateur pour WordPress du moment qu’on a accès aux données dans la base MySql.

Récupérer l’accès à la base

Il y a deux façons courantes d’accéder aux données de la base MySql qui sous-tend un site WordPress hébergé sous LAMP :

  • L’accès en ligne de commande via le client mysql
  • L’accès via l’interface web phpmyadmin

Dans les deux cas, il faut d’abord localiser la base de données du site WordPress, c’est à dire vérifier où elle est hébergée physiquement, connaître son nom et le compte d’utilisateur qui permet d’y accéder. Toutes ces informations figurent en clair dans le fichier de configuration de WordPress qui est un simple fichier PHP éditable avec un éditeur de texte standard.

Le fichier wp-config.php

Comme un même serveur peut héberger plusieurs sites sous WordPress, il faut localiser le répertoire qui contient l’installation qui nous concerne (sur un serveur GNU Linux Debian, on trouve généralement ces répertoires dans /var/www … sur d’autres configurations GNU / Linux, le site sera peut-être hébergé dans un sous-répertoire de /home ). Une fois le “bon” répertoire trouvé, le fichier de configuration de WordPress est wp-config.php que l’on peut éditer en ligne de commande (avec vi ou more), ou encore rapatrier par FTP pour examiner son contenu.

Les lignes qui nous intéressent sont les suivantes :

// ** Réglages MySQL - Votre hébergeur doit vous fournir ces informations. **
//
/** Le nom de la base de données de WordPress. */
define('DB_NAME', '<nom_bd>');
/** Utilisateur de la base de données MySQL. */
define('DB_USER', '<nom_util>');
/** Mot de passe de la base de données MySQL. */
define('DB_PASSWORD', '<mot_de_passe>');
/** Adresse de l'hébergement MySQL. */
define('DB_HOST', '<serveur>');
[...]
$table_prefix  = '<wp_>';

Les cinq informations à noter sont celles que j’ai remplacé par du texte <entre crochets>.

Nous allons en avoir besoin pour nous connecter à la base de WordPress.

Deux cas de figure se présentent pour l’emplacement physique de la base :

  • Soit elle se trouve sur le même serveur
  • Soit elle est sur un serveur distant

Si elle est sur le même serveur, nous pouvons poursuivre en ligne de commande en nous connectant en MySql. Si elle est sur un serveur séparé, il faut soit accéder à ce serveur également en ligne de commande, soit mettre en oeuvre un accès par un autre système (souvent phpMyAdmin, qui s’utilise dans un navigateur web à partir de l’adresse communiquée par votre hébergeur).

Se connecter à la base

Voici comment se connecter à la base en ligne de commande en utilisant les informations collectées dans le fichier wp-config.php :

mysql -u <nom_util> -p <nom_bd>

(remplacer les expressions entre crochet par les informations trouvées dans wp-config.php). Vous devrez fournir le mot de passe également trouvé dans wp-config.php.

Sélectionner la bonne table

Nous recherchons maintenant la table dans laquelle WordPress stocke les informations sur ses utilisateurs. Par défaut il s’agit de la table wp_users. Cependant, si vous avez indiqué un autre préfixe que le préfixe “wp_” proposé par défaut dans votre fichier de configuration (par exemple si vous avez plusieurs installations de WordPress utilisant la même base de données), il faut chercher la table <wp_>users.

Si vous ne trouvez pas la table correspondantte ou n’êtes pas sur, vous pouvez demander à mysql de lister toutes les tables existantes avec la commande SHOW TABLES;

(tapez vos commandes sur la ligne de commande MySql en les terminant systématiquement par un point-virgule et la touche “entrée”)

Repérez la table qui a le préfixe correspondant à votre installation de WordPress et le suffixe _users.

Ajouter un utilisateur au site

Pour la suite de cette explication, nous considérerons que votre table d’utilisateurs est wp_users (cas le plus courant).

Afin d’ajouter un utilisateur au site, nous allons entrer une nouvelle ligne dans la table wp_users, en mentionnant un identifiant utilisateur et un mot de passe. Choisissez un identifiant d’utilisateur qui n’est pas en usage sur votre site (par exemple admin_provisoire). Nous allons devoir lui générer un mot de passe crypté selon le format MD5.

Pour cela, vous pouvez utiliser un des nombreux services en ligne de calcul de clé MD5, par exemple celui-ci.

L’ajout de l’utilisateur se fait avec cette commande mysql :

INSERT INTO wp_users ( user_login, user_pass ) VALUES  ( '<identifiant>', '<mot_de_passe_crypté_md5>' );

A noter qu’il ne faut surtout pas mettre le mot de passe “en clair”, mais bien la chaîne de 32 caractères de la clé MD5 de ce mot de passe.

Nous devons récupérer l’identifiant interne que MySql a attribué à ce nouvel enregistrement :

SELECT LAST_INSERT_ID();

(si cette fonction retourne zéro, faites une recherche avec SELECT id FROM wp_users WHERE user_login=’<identifiant>‘; )

Pour la suite de l’explication, nous appellerons cet identifiant numérique <id>.

Transformer le nouvel utilisateur en administrateur

Si vous essayez maintenant de vous connecter à WordPress avec l’identifiant que nous venons d’ajouter dans la base des utilisateurs, vous constaterez en général que vous êtes connecté comme simple utilisateur du site, ou que vous obtenez une erreur du type “Vous n’avez pas les droits suffisants pour accéder à cette page”.

C’est normal, car pour reprendre la main sur votre site via ce compte d’administrateur, nous devons maintenant lui attribuer les privilèges appropriés.

Voici la ligne de commande, toujours sous mysql :

INSERT INTO wp_usermeta ( user_id, meta_key, meta_value ) VALUES ( <id>,  'wp_capabilities', 'a:1:{s:13:"administrator";b:1;}' );

Le tour est joué ! Nous venons d’ajouter une valeur sérialisée dans la table usermeta qui stocke les données associées aux utilisateurs WordPress (et notamment les privilèges d’administration). Ici également si votre préfixe de table est différent de wp_, vous devrez ajuster la commande pour insérer la valeur dans la bonne table.

Vous pouvez maintenant vous connecter à l’administration de votre site WordPress :

http://adresse.de.votre.site/wp-admin

Utilisez l’identitifant et le mot de passe nouvellement créés ci-dessus, allez modifier l’adresse e-mail et le mot de passe de votre compte d’administration habituel, puis vous pouvez supprimer le compte d’administration provisoire.

Liens utiles

A lire également...

WordPress › Error

There has been a critical error on your website.

Learn more about debugging in WordPress.