🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

¿Cómo crear un usuario y asignar privilegios en MySQL para WordPress?

Actualizado el 28 de noviembre de 2025

Introducción: La importancia de un usuario dedicado para WordPress

Cuando instalas WordPress, necesitas una base de datos MySQL donde se almacenarán todas las publicaciones, páginas, comentarios, configuraciones y más. Lo más seguro y recomendable es no usar el usuario root de MySQL, sino crear un usuario específico para WordPress y asignarle solo los privilegios que necesita. Esto protege tu sitio: si alguien logra vulnerar la contraseña de ese usuario, no podrá borrar todas las bases de datos del servidor, solo afectará a la de tu WordPress.

En este artículo te explicaré paso a paso cómo crear un usuario MySQL para WordPress y asignarle los privilegios necesarios mediante comandos SQL. También cubriremos cómo hacerlo desde herramientas como phpMyAdmin o desde el panel Syspanel (antes HestiaCP), que usa el puerto 2106.


Requisitos previos

Antes de empezar, asegúrate de tener:

  • Acceso al servidor MySQL (vía línea de comandos, phpMyAdmin o panel de control).
  • Credenciales del usuario root de MySQL (o un usuario con privilegios de administración).
  • El nombre de la base de datos que usarás para WordPress. Si aún no la has creado, te recomiendo hacerlo antes de continuar.

[INFO] Si usas Syspanel (HestiaCP, puerto 2106), puedes crear la base de datos desde el panel antes de asignar el usuario. Es muy intuitivo.


## Paso 1: Acceder a MySQL

### Desde la línea de comandos (SSH)

Si tienes acceso SSH al servidor, conéctate y ejecuta:

mysql -u root -p

Te pedirá la contraseña del usuario root. Una vez autenticado, verás el prompt mysql>.

### Desde phpMyAdmin

  1. Abre phpMyAdmin en tu navegador (normalmente http://tudominio.com/phpmyadmin).
  2. Inicia sesión con el usuario root (o un usuario con privilegios globales).

### Desde Syspanel (HestiaCP, puerto 2106)

  1. Accede a https://tudominio.com:2106 e inicia sesión.
  2. Ve a la sección Bases de datos.
  3. Allí podrás crear tanto la base de datos como el usuario desde la interfaz gráfica. Sin embargo, para asignar privilegios personalizados, a veces es mejor usar la línea de comandos o phpMyAdmin.

## Paso 2: Crear el usuario MySQL para WordPress

Vamos a crear un usuario llamado wp_user con una contraseña segura. No uses contraseñas débiles como "123456" o "password".

Ejecuta el siguiente comando SQL:

CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'contraseña_segura_aqui';
  • 'wp_user'@'localhost' significa que el usuario solo podrá conectarse desde el mismo servidor donde está MySQL. Si tu WordPress está en otro servidor, deberías usar 'wp_user'@'%' (menos seguro) o la IP específica del servidor web.
  • Cambia contraseña_segura_aqui por una contraseña robusta (mezcla de mayúsculas, minúsculas, números y símbolos).

[WARNING] No uses el símbolo @ dentro de la contraseña porque puede causar conflictos con la sintaxis SQL. Mejor usa caracteres como !, #, $, etc.


## Paso 3: Crear la base de datos para WordPress (si no existe)

Si aún no has creado la base de datos, hazlo con:

CREATE DATABASE nombre_wp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • utf8mb4 es el juego de caracteres recomendado para WordPress, ya que soporta emojis y caracteres especiales.
  • Cambia nombre_wp_db por el nombre que quieras, por ejemplo wordpress_db.

## Paso 4: Asignar privilegios al usuario (GRANT)

Aquí viene la parte clave: asignar los permisos mínimos necesarios para que WordPress funcione correctamente. Lo ideal es otorgar solo los privilegios sobre la base de datos específica.

### Comando básico para todos los permisos sobre una base de datos

GRANT ALL PRIVILEGES ON nombre_wp_db.* TO 'wp_user'@'localhost';
  • ALL PRIVILEGES da control total sobre la base de datos (SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, etc.).
  • nombre_wp_db.* significa "todos los objetos (tablas, vistas, procedimientos) dentro de esa base de datos".
  • TO 'wp_user'@'localhost' especifica el usuario y desde dónde se conecta.

[TIP] Si quieres ser más restrictivo, puedes usar solo los privilegios que WordPress necesita. Por ejemplo:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON nombre_wp_db.* TO 'wp_user'@'localhost';

Esto cubre operaciones normales de WordPress (actualizaciones, plugins, temas, etc.).

### Para conexiones remotas (cuidado con la seguridad)

Si tu WordPress está en un servidor diferente al de la base de datos, debes reemplazar localhost por % o una IP específica:

GRANT ALL PRIVILEGES ON nombre_wp_db.* TO 'wp_user'@'%';

Pero esto expone tu base de datos a conexiones desde cualquier lugar. Mejor restringe a la IP del servidor web:

GRANT ALL PRIVILEGES ON nombre_wp_db.* TO 'wp_user'@'192.168.1.100';

## Paso 5: Aplicar los cambios

Después de ejecutar los comandos GRANT, es necesario recargar los privilegios para que MySQL los aplique inmediatamente:

FLUSH PRIVILEGES;

[INFO] Sin FLUSH PRIVILEGES, los cambios no se reflejarán hasta que reinicies MySQL, lo cual no es recomendable en un entorno de producción.


## Paso 6: Verificar los privilegios asignados

Para asegurarte de que todo está correcto, puedes listar los privilegios del usuario:

SHOW GRANTS FOR 'wp_user'@'localhost';

Esto mostrará una lista de todos los permisos que tiene ese usuario.


## Paso 7: Configurar WordPress con el nuevo usuario

Ahora, cuando instales WordPress (o modifiques el archivo wp-config.php), usa estos datos:

  • Nombre de la base de datos: nombre_wp_db
  • Usuario de la base de datos: wp_user
  • Contraseña: contraseña_segura_aqui
  • Servidor de la base de datos: localhost (si está en el mismo servidor) o la IP correspondiente.

Ejemplo de configuración en wp-config.php:

define('DB_NAME', 'nombre_wp_db');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', 'contraseña_segura_aqui');
define('DB_HOST', 'localhost');

## Solución de problemas comunes (FAQ)

### ¿Por qué recibo "Access denied for user 'wp_user'@'localhost'"?

  • Verifica que el usuario existe: SELECT User, Host FROM mysql.user;
  • Confirma que la contraseña es correcta.
  • Asegúrate de haber ejecutado FLUSH PRIVILEGES.
  • Comprueba que el host coincida (localhost vs %).

### ¿Puedo usar el mismo usuario para varias bases de datos de WordPress?

Sí, pero no es recomendable por seguridad. Si un sitio es comprometido, el atacante podría acceder a los otros. Mejor crea un usuario por cada instalación.

### ¿Qué hago si olvido la contraseña del usuario?

Puedes cambiarla con:

ALTER USER 'wp_user'@'localhost' IDENTIFIED BY 'nueva_contraseña';
FLUSH PRIVILEGES;

### ¿Es necesario usar utf8mb4 en la base de datos?

Sí, especialmente si planeas usar emojis o caracteres de idiomas como chino, árabe, etc. WordPress lo recomienda desde la versión 4.2.

### ¿Cómo crear el usuario desde Syspanel (HestiaCP)?

  1. Ve a Bases de datos en Syspanel (puerto 2106).
  2. Haz clic en Agregar base de datos.
  3. Completa los campos: nombre de la base, usuario y contraseña.
  4. El panel crea automáticamente el usuario y le asigna todos los privilegios sobre esa base.
  5. Luego, si necesitas permisos más específicos, puedes modificarlos desde phpMyAdmin o línea de comandos.

## Conclusión

Crear un usuario MySQL dedicado para WordPress y asignarle privilegios mínimos es una práctica fundamental de seguridad. En este artículo aprendiste:

  • Cómo crear el usuario con CREATE USER.
  • Cómo asignar permisos con GRANT.
  • Cómo aplicar cambios con FLUSH PRIVILEGES.
  • Cómo verificar la configuración.
  • Soluciones a problemas comunes.

Recuerda: nunca uses el usuario root en producción. Tu WordPress funcionará perfectamente con un usuario que solo tenga acceso a su propia base de datos. Si usas Syspanel, el proceso es aún más sencillo desde su interfaz.

[WARNING] Siempre respalda tu base de datos antes de hacer cambios importantes. Un error en los privilegios podría dejarte sin acceso.

Ahora ya estás listo para configurar tu WordPress de forma segura. ¡Manos a la obra!

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel