Teléfono antiguo

La base de datos WordPress es el cerebro de tu instalación, ya que almacena toda la información que vayas creando. Esto la convierte en el objetivo principal de los atacantes.

WordPress es un software de código abierto y todo el mundo tiene acceso a los nombres por defecto de las tablas que forman su base de datos. Cualquier individuo con malas intenciones y suficientes conocimientos puede aprovechar vulnerabilidades existentes (habitualmente en plugins o temas mal programados) para realizar un ataque a tu instalación. Como el atacante conoce los nombres de tus tablas, puede conseguir eliminar todos los contenidos de estas mediante inyección de SQL.

Nombres de las tablas WordPress con el prefijo wp_ por defecto
Nombres de las tablas WordPress con el prefijo wp_ por defecto.

Una forma muy sencilla de protegerse es mediante el uso de prefijos alternativos para los nombres de las tablas. Si instalas WordPress por defecto, todas las tablas en tu base de datos tomarán el prefijo wp_: wp_posts, wp_postmeta, wp_users, wp_usermeta, wp_comments, etc. Como ya he dicho, una buena práctica de seguridad es cambiar este prefijo wp_ por otro prefijo diferente.

Por ejemplo, podríamos decidir escoger el prefijo 1a2b3c_ como alternativa. La pregunta es, ¿cómo puedo cambiar el prefijo por defecto wp_ por el nuevo prefijo 1a2b3c_? Ahora mismo te lo explico.

Modificar el archivo wp-config.php

El mejor momento para tomar la decisión de usar un prefijo diferente a wp_ es antes de instalar WordPress. En este caso solo tenemos que modificar una línea del archivo wp-config.php (ya te hablé de él aquí). En concreto esta línea:

$table_prefix  = 'wp_';

que la cambiaremos, modificando el prefijo wp_ por el nuevo prefijo que hayamos escogido:

$table_prefix  = '1a2b3c_';

Y ya está. Cuando realicemos el proceso de instalación de WordPress, este creará las tablas con el prefijo 1a2b3c_ y dejará todo listo.

Sin embargo, si partimos de una instalación que no es nueva y queremos hacer este cambio para añadir más seguridad, además de tocar el archivo wp-config.php como te he explicado, tienes que cambiar los nombres de las tablas en la base de datos tú mismo.

Cambiar el prefijo en la base de datos

Una vez que tenemos el archivo wp-config.php listo, hemos de modificar los nombres de las tablas en la base de datos. Esto solo lo haremos si partimos de una instalación ya creada con contenido. Para esto, tienes que ejecutar las siguientes sentencias SQL:

RENAME TABLE wp_links TO 1a2b3c_links;
RENAME TABLE wp_commentmeta TO 1a2b3c_commentmeta;
RENAME TABLE wp_comments TO 1a2b3c_comments;
RENAME TABLE wp_options TO 1a2b3c_options;
RENAME TABLE wp_postmeta TO 1a2b3c_postmeta;
RENAME TABLE wp_posts TO 1a2b3c_posts;
RENAME TABLE wp_term_relationships TO 1a2b3c_term_relationships;
RENAME TABLE wp_term_taxonomy TO 1a2b3c_term_taxonomy;
RENAME TABLE wp_termmeta TO 1a2b3c_termmeta;
RENAME TABLE wp_terms TO 1a2b3c_terms;
RENAME TABLE wp_usermeta TO 1a2b3c_usermeta;
RENAME TABLE wp_users TO 1a2b3c_users;

Cada una de estas sentencias cambia el nombre a una de las tablas. Aquí te he puesto las sentencias para las tablas básicas de WordPress, pero ten en cuenta que tendrás que añadir más sentencias si tienes más tablas en tu base de datos. Esto sucede cuando usas plugins que usan tablas adicionales (algo muy común).

Tablas WordPress después del cambio de prefijo.
Tablas WordPress después del cambio de prefijo.

Y recuerda que si has escogido un prefijo diferente a 1a2b3c_ (algo que, por cierto, te recomiendo), tendrás que modificar las sentencias anteriores cambiando 1a2b3c_ por tu propio prefijo. Supongo que ya te había quedado claro, pero te lo recuerdo por si acaso.

Cambiar meta informaciones en la base de datos

Cambiando los nombres de las tablas de la base de datos WordPress no hemos acabado. Mucha gente se queda aquí y luego se da cuenta de que aparecen los problemas.

Tanto la tabla wp_options como la tabla wp_usermeta (que serán 1a2b3c_options y 1a2b3c_usermeta con el nuevo prefijo) tienen filas en su interior que incluyen el prefijo por defecto wp_ en las columnas option_name y meta_key, respectivamente. Esto lo tenemos que cambiar también y usar el nuevo prefijo 1a2b3c_.

Lo primero que debemos hacer es consultar cuales son estas filas. Mediante SQL es tan sencillo como ejecutar cada una de estas dos consultas por separado:

SELECT * FROM 1a2b3c_options WHERE option_name LIKE'%wp_%';

SELECT * FROM 1a2b3c_usermeta WHERE meta_key LIKE'%wp_%';

Después de esto puedes ir cambiando a mano cada uno de los resultados, o bien usar sentencias de actualización para ir más rápido. En concreto, para la tabla de options como mínimo tendrás que cambiar las filas cuya columna option_names tenga el valor wp_user_roles:

UPDATE 1a2b3c_options SET option_name = '1a2b3c_user_roles' 
WHERE option_name = 'wp_user_roles';

Y para la tabla usermeta tendrás que hacer lo mismo para aquellas filas que tengan en la columna meta_key los valores wp_capabilities, wp_user_level y wp_user-settings:

UPDATE 1a2b3c_usermeta SET meta_key = '1a2b3c_capabilities' 
WHERE meta_key = 'wp_capabilities';
UPDATE 1a2b3c_usermeta SET meta_key = '1a2b3c_user_level' 
WHERE meta_key = 'wp_user_level';
UPDATE 1a2b3c_usermeta SET meta_key = '1a2b3c_user-settings' 
WHERE meta_key = 'wp_user-settings';

Si con las consultas encuentras más filas en estas tablas que tienen el option_name o el meta_key incluyendo el antiguo prefijo wp_, tendrás que hacer más sentencias UPDATE acorde a tus necesidades.

Haz una copia de seguridad antes de aplicar estos cambios. Es la única manera que tienes de poder recuperar el estado anterior de tu base de datos y volver atrás sin perder nada.

Alternativa: usar un plugin

Actualización: Parece ser que el plugin Change DB Prefix ha dejado de existir. Una alternativa puede ser Defender, de la gente de WPMUDev.

Como alternativa, si no estamos convencidos de usar SQL directamente en la base de datos, podemos probar el plugin Change DB Prefix para WordPress. Este plugin promete cambiar el prefijo en la base de datos para todas nuestras tablas sin problemas. Tan solo tienes que indicar el nuevo prefijo en la interfaz y listo.

Captura de la interfaz del plugin Change DB Prefix.
Captura de la interfaz del plugin Change DB Prefix.

Además, también te cambiará la linea en el archivo wp-config.php sin que tengas que hacerlo tú. Eso si, para ello el archivo wp-config.php tiene que tener los permisos de escritura habilitados. Si no es tu caso y falla, te recomiendo que mejor lo cambies tú a mano. Tampoco es un drama, ya que como has visto, sólo es una línea la que tienes que tocar.

Resumen final

En este artículo has podido ver la manera de cambiar el prefijo en los nombres de las tablas de tu instalación WordPress para añadir un pequeño plus seguridad adicional y, hasta cierto punto, protegerte contra ataques de inyección SQL.

En concreto, si aún no hemos instalado WordPress tan solo has de cambiar una línea en el archivo wp-config.php. En cambio, si quieres aplicar esto en tu WordPress ya instalado y con contenido, tienes que cambiar tú el prefijo en el nombre de las tablas y también modificar el nombre de algunas filas en algunas tablas. Esto es algo tedioso, pero el plugin Change DB Prefix puede ayudarte.

Te recomiendo que pruebes esto y me comentes si has tenido algún problema. Recuerda que es posible que tu proveedor de alojamiento web ya haya utilizado un prefijo por defecto diferente a wp_ en el momento de la instalación de tu WordPress. Si esto es así, puedes estar contento ya que no tienes que hacer nada.

Imagen destacada de macinate.

27 respuestas a «Cambiar el prefijo de la base de datos WordPress»

  1. Avatar de Juaco Amado

    El plugin ya no está en el repositorio de WordPress; el resto, transmiten poca confianza, bajas puntuaciones.
    Miedo me da la tabla wp_options; miro y veo demasiadas referencias a wp_ ¿»search and replace» y cruza dedos? 😛

    Buen artículo, muy detallado en la explicación.

    Gracias y saludos
    Juaco Amado

    1. Avatar de Antonio Villegas

      Cierto, el plugin parece que ha muerto. Otra alternativa, si quieres usar un plugin, es utilizar Defender.

  2. Avatar de ethel
    ethel

    Hola Antonio muy bueno el tutorial,gracias por compartirlo! si me puedes ayudar te estaré muy agradecida, después de leer el apartado donde dices como cambiar el prefijo de la base de datos, tengo una pregunta es necesario ejecutar las sentencias SQL? o puedo desde el phpmyadmin pintar las tablas y elegir : reemplazar prefijo de la tabla, es lo mismo o tendría otros efectos? pues te cuento esto porque no hice el cambio de un principio como debía ser y ahora tengo que cambiar 30 tablas que tengo aunque ya hice las copias de las mismas pero da yuyu tocarlas sin preguntarte antes.Gracias y saludos. Ethel

    1. Avatar de Antonio

      ¡Hola Ethel! Puedes remplazar el prefijo de la tabla directamente desde phpMyAdmin. En ese caso no tendrás que ejecutar ninguna sentencia SQL, pero claro, hacerlo una a una es mucho más pesado. Y lo más importante: siempre haz una copia de seguridad antes para evitar desastres. Un saludo.

  3. Avatar de ethel
    ethel

    gracias Antonio por responder tan pronto!! ya lo tengo terminado y a trabajar ahora,me gusta tu blog empezare a seguirte para aprender más XD.Saludos.Ethel

    1. Avatar de Antonio Villegas

      Gracias por la información, Fermin.

    2. Avatar de Victor
      Victor

      Funciona perfectamente 😉

  4. Avatar de jesus
    jesus

    hola yo aplique todo estoy ahora al ir al index de mi sitio me mada a la url de instacion de wordpress en donde debo elegir idioma ? (ya era un wordpress con contenido muy poco perot enia unas 10 entradas)

    1. Avatar de Antonio Villegas

      Hola Jesús. Si te pasa esto es porque WordPress no es capaz de encontrar tus tablas. Asegúrate de que cambiaste bien los prefijos y revisa que tus tablas tengan contenido en la base de datos, no vaya a ser que por error las borraras. Recuerda que siempre puedes hacer el proceso utilizando un plugin si no estás seguro de lo que haces. ¡Suerte!

      1. Avatar de Gerardo Macero

        tienes razón es posible que seas como dices porque falto alguna tabla cambiarle la extension wp_ pero en ocasiones me ha sucedido que tengo que también cambiar la extension en wp_config.php en los archivos de wordpress allí también debes indicar que la extensión a utilizar fue la que escogiste y no la de wp_

  5. Avatar de Fabio Alves Martins
    Fabio Alves Martins

    No sabéis la de sitios web con información parecida he encontrado, pero ninguna me funcionada.

    Gran presentación e WCBCN17

    Gracias!

  6. Avatar de jhon
    jhon

    que curioso esta web da recomendaciones de cambiar prefijo y se puede acceder desde wp-admin

    1. Avatar de Antonio Villegas

      Seguramente ya lo sabrás porque te habrás leído la entrada, pero cuando nos referimos a cambiar de prefijo estamos hablando de la base de datos. Cambiar la dirección de acceso por defecto al panel de control es algo diferente, aunque también es algo recomendable para mejorar la seguridad de tu web. Nuestra web no es un sitio crítico (básicamente un blog sin más pretensiones), y aunque tenemos todo actualizado a la última versión, si te quedas más tranquilo propondré hacer este cambio y lo valoraremos. Un saludo, Jhon 😉

  7. Avatar de Antonio
    Antonio

    Hola Antonio,

    ¿Esta operación tendría el mismo efecto que sustituir las tablas de la base de datos con el plugin Better Search Replace? Es que así no puedo porque me aparece un error, y estoy buscando formas alternativas de hacerlo.

    Gracias!

    1. Avatar de Antonio Villegas

      No. Ese plugin creo que lo que hace es reemplazar dentro de los contenidos de las tablas de la base de datos. De lo que habla la entrada es de cambiar el nombre de las tablas. Si te da error es porque quizás no tienes permisos suficientes.

  8. Avatar de Raül Bocache
    Raül Bocache

    Maravilloso tutorial Antonio. Yo cambié los prefijos en wp-config. php y en cada una de las tablas y la información la tenía, pero me quitaba los permisos de administrador. Ahora que sé que hay que cambiar ciertas opciones de algunas tablas ha hecho que se me abra el cielo.
    Muchas gracias por compartir!

  9. Avatar de Darien
    Darien

    Muchas gracias por este articulo, me sirvió demasiado, pero necesito una pequeña ayuda, mi base de datos ya cambio, es decir, los links y prefijos de las tablas y realice la configuración en el archivo wp_config de mi web, pero al momento de ingresar al admin, el me permite loguear normalmente pero no me muestra nada del escritorio del administrador, espero me puedan ayudar… Muchas gracias

  10. Avatar de Jesus
    Jesus

    Buen artículo. Probé algunos plugins pero cascaban, al final me toco hacerlo a manija, por supuesto en una BD nueva.
    Muchas gracias por la guia

    1. Avatar de Antonio Villegas

      Gracias a ti por el comentario.

  11. Avatar de Pipe Planner
    Pipe Planner

    Qué maravilla gracias en verdad por tener este tipo de contenido y bien explicado. Logre resolverlo después de dar mil vueltas buscando la solución de mi WordPress al haber realizado un Backup previamente que me cambió el prefijo y me obligó a hacer todas estas configuraciones. No volveré a usar el plugin BackitUp

  12. Avatar de Jorge
    Jorge

    Hola Antonio, muy claro y muy buen blog!

    Solo una duda:

    Si la instalación es nueva, con la línea en wp-config es suficiente o también se debe cambiar meta informaciones en la base de datos?

    Gracias por tu respuesta.

    1. Avatar de Antonio Villegas

      Si aún no has instalado WordPress, con cambiar el archivo wp-config.php es suficiente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad de Nelio Software

Tus datos personales se almacenarán en SiteGround y serán usados por Nelio Software con el único objetivo de publicar tu comentario aquí. Con el envío de este comentario, nos das el consentimiento expreso para ello. Escríbenos para acceder, rectificar, limitar o eliminar tus datos personales.