Accueil > Wordpress > WordPress: Renommer les tables de la base de données

WordPress: Renommer les tables de la base de données

Cette opération nécessaire c’est avérée plus complexe que prévue. Tout d’abord le plugin wp-security-scan ne permet pas de réaliser cette opération, ni sur Free.fr, ni sur mon site local off-line.

Je me suis donc mis à la recherche d’une solution alternative. J’ai trouvé un excellent plugin, nommé wordpress-table-rename. Il est diponible ici : http://www.seoegghead.com/software/wordpress-table-rename.seo

Il va copier vos tables et leurs contenus dans de nouvelles tables, il suffira ensuite de supprimer manuellement les tables originales.

Malheureusement, s’il fonctionne parfaitement localement, il plante sur le WordPress Free, dû probablement à des privilèges SQL moindres sur Free. Mais il peut vous convenir, il est d’une simplicité totale.

J’ai donc dû passé à la méthode manuelle. Je ne suis pas le seul et j’ai donc trouvé un article de Richard Ramblings, qui s’est trouvé confronté au même problème.
http://www.richardsramblings.com/2008/02/changing-your-wordpress-table-prefix/

Il nous y explique que sont site à été piraté par une attaque directe dans sa base SQL. Il insiste donc sur les trois fondamentaux de sécurités WordPress :

  • renommer les tables wp_
  • ne pas montrer la version de WordPress
  • mettre WordPress à jour dans la dernière version

Voici donc la procédure manuelle de renommage des tables.

Tout d’abord, il faut renommer les tables nommées wp_ par l’installation standard.

Vous pouvez utiliser l’interface d’administration mySQL, et sélectionner les tables une à unes puis cliquer sur Opérations pour changer le nom de la table. Une méthode plus rapide consiste à lancer une requête SQL unique, comme ci-dessous.

RENAME TABLE `fanta78`.`wp_comments` TO `fanta78`.`42wp76_comments` ;
RENAME TABLE `fanta78`.`wp_links` TO `fanta78`.`42wp76_links` ;
RENAME TABLE `fanta78`.`wp_options` TO `fanta78`.`42wp76_options` ;
RENAME TABLE `fanta78`.`wp_postmeta` TO `fanta78`.`42wp76_postmeta` ;
RENAME TABLE `fanta78`.`wp_posts` TO `fanta78`.`42wp76_posts` ;
RENAME TABLE `fanta78`.`wp_terms` TO `fanta78`.`42wp76_terms` ;
RENAME TABLE `fanta78`.`wp_term_relationships` TO `fanta78`.`42wp76_term_relationships` ;
RENAME TABLE `fanta78`.`wp_term_taxonomy` TO `fanta78`.`42wp76_term_taxonomy` ;
RENAME TABLE `fanta78`.`wp_usermeta` TO `fanta78`.`42wp76_usermeta` ;
RENAME TABLE `fanta78`.`wp_users` TO `fanta78`.`42wp76_users` ;

Il faut ensuite mettre le nouveau nom 42wp76_ dans le fichier wp-config.php : $table_prefix  = ‘42wp76_‘;

Et là le site refonctionne correctement pour les utilisateurs non enregistrés, mais… impossible de s’authentifier ! Un message du type « Droits insuffisants » empêche d’accéder à l’administration.

En fait il reste une dernière manipulation SQL à faire. Il faut se connecter dans l’interface d’administration mySQL, et sélectionner la table 42wp76_options et changer la valeur wp_user_roles par 42wp76_user_roles.

Il faut procéder de même dans la table 42wp76_usermeta et changer la valeur wp_capabilities, wp_user_level, and wp_autosave_draft_ids par 42wp76_capabilities, 2wp76_user_level, et 2wp76_autosave_draft_ids.

Ouf !

  1. 03/02/2009 à 16:18 | #1

    Salut, juste un message pour te signaler que depuis la version 2.7, il est inutile de toucher aux tables 42wp76_options et 42wp76_usermeta, les valeurs se changent d’elles mêmes maintenant, ce qui est pas mal, quand on diffuse un CMS comme wordpress, ce genre de désagrément ne devrait pas arriver…

    Ils l’ont corrigé, il suffit donc de renommer les tables dans phpmyadmin, et de modifier wp-config…

  2. fanta78
    03/02/2009 à 18:47 | #2

    Merci Seb, je ne le savais pas.
    L’idéal reste toujours de prévoir son coup avant l’installation, mais effectivement, c’est une bonne idée d’avoir implémenté ça. On n’est pas souvent dans une configuration idéale 😉

  3. Ju
    04/02/2009 à 01:48 | #3

    1000 fois MERCI! !!!
    Cette aide m’aura été d’une aide tres précieuse, c t exactement mon problème! :):):)

  1. Pas encore de trackbacks