Crear usuario MySQL con permisos limitados: guía de seguridad

crear usuario MySQL

📅 Publicado el 6 de septiembre, 2026 · Por Equipo RedServicio

Por qué crear usuario MySQL con permisos limitados es fundamental

Lo he visto demasiadas veces: webs montadas por gente que sabe programar y, aun así, conectan su aplicación a la base de datos con un único usuario que tiene todos los privilegios. Todo. Y ¿qué pasa si un atacante explota una inyección SQL o lee el archivo de configuración? Que obtiene control absoluto: puede leer, modificar, vaciar tablas… incluso borrar la base de datos entera. Por eso saber cómo crear usuario MySQL con permisos restringidos no es un extra para paranoides. Es higiene básica, de las que se hacen el primer día.

El principio detrás de todo esto tiene nombre: mínimo privilegio (least privilege). Cada usuario debería tener solo los permisos que necesita para su función. Ni uno más, ni uno menos.

Conceptos básicos: usuarios y privilegios en MySQL

En MySQL, un usuario se define por dos cosas: un nombre y el host desde el que puede conectarse. Por ejemplo, ‘usuario_web’@’localhost’ solo podrá conectar desde el mismo servidor donde corre MySQL, mientras que ‘usuario_web’@’%’ podría hacerlo desde cualquier host. Este último, mejor evitarlo salvo necesidad real.

Los privilegios se otorgan a nivel global (todas las bases de datos), de base de datos, de tabla o incluso de columna. Cuanto más específico el nivel, menor el riesgo si algo se compromete. Lógico, ¿no?

Privilegios más habituales para una aplicación web

  • SELECT: leer datos de las tablas.
  • INSERT: añadir nuevos registros.
  • UPDATE: modificar registros existentes.
  • DELETE: eliminar registros (solo si tu aplicación de verdad lo necesita).

¿Y DROP, ALTER, CREATE o GRANT? Resérvalos para un usuario de administración aparte. Nunca para el que usa tu CMS o aplicación en producción.

Cómo crear usuario MySQL paso a paso

Paso 1: Acceder a MySQL como administrador

Conéctate al servidor con un usuario administrativo:

mysql -u root -p

Paso 2: Crear el usuario restringido

Usa el comando CREATE USER indicando el host desde el que se conectará. Si la aplicación está en el mismo servidor (lo habitual en hosting compartido o VPS), localhost es suficiente:

CREATE USER ‘usuarioweb’@’localhost’ IDENTIFIED BY ‘ContraseñaSegura123!’;

Consejo: contraseñas largas y generadas al azar. Con OpenSSL puedes sacarlas en un segundo: openssl rand -base64 24. Y jamás reutilices la contraseña del administrador.

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

CREATE DATABASE mi_tienda CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Paso 4: Otorgar solo los permisos necesarios

Aquí está la clave. Nada de GRANT ALL PRIVILEGES por comodidad; concede únicamente los permisos de operación:

GRANT SELECT, INSERT, UPDATE, DELETE ON mi_tienda.* TO ‘usuarioweb’@’localhost’;

Y aplica los cambios:

FLUSH PRIVILEGES;

Paso 5: Verificar los permisos asignados

Comprueba que el usuario tiene exactamente lo que esperabas:

SHOW GRANTS FOR ‘usuarioweb’@’localhost’;

Si aparece algo como GRANT ALL PRIVILEGES, detente y revisa los comandos anteriores. Has concedido más de la cuenta.

Usuario de lectura y usuario de escritura: separar responsabilidades

En proyectos con algo de tráfico, crear dos usuarios distintos es una práctica que recomiendo sin ambigüedad: uno de solo lectura para consultas y reportes, y otro con permisos de escritura para la aplicación principal.

CREATE USER ‘consulta_ro’@’localhost’ IDENTIFIED BY ‘OtraClave456!’;

GRANT SELECT ON mi_tienda.* TO ‘consulta_ro’@’localhost’;

Así, si un script de analítica o un panel de reportes se ve comprometido, el atacante solo podrá leer datos. No alterarlos. Una barrera adicional que cuesta dos minutos configurar.

Buenas prácticas adicionales de seguridad

  1. Limita el host: evita ‘@%’ salvo que sea imprescindible. Si la aplicación está en el mismo servidor, basta localhost.
  2. Rota contraseñas: cámbialas al menos cada 90 días, y siempre cuando un desarrollador deja el equipo.
  3. Revoca permisos que no se usan: con REVOKE puedes ajustar sobre la marcha: REVOKE DELETE ON mi_tienda.* FROM ‘usuarioweb’@’localhost’;
  4. Elimina usuarios obsoletos: DROP USER ‘usuarioweb’@’localhost’; cuando un proyecto o integración termine.
  5. No uses root en la aplicación: nunca, jamás, pongas credenciales administrativas en el wp-config.php, el .env o similar.
  6. Guarda credenciales fuera del directorio web: que no queden accesibles por HTTP si la configuración del servidor falla.
Importante: para mantenimiento, migraciones o cambios de estructura, usa un usuario administrativo aparte solo el tiempo necesario. Automatizarlo en tu flujo de despliegue evita tentaciones.

Errores comunes al crear usuario MySQL

  • Conceder ALL PRIVILEGES por comodidad: la vía rápida de hoy es el problema de seguridad de mañana.
  • Usar el comodín ‘%’ en el host: multiplica la superficie de ataque, sobre todo si el puerto 3306 está abierto a internet.
  • Compartir el mismo usuario entre varias aplicaciones: si una se compromete, quedan expuestas todas.
  • No revisar SHOW GRANTS tras configurar: los errores de sintaxis en GRANT pueden dar resultados inesperados.

¿Puedo cambiar los permisos de un usuario existente sin borrarlo?

Sí. Usa REVOKE para quitar permisos y GRANT para añadirlos. Los cambios aplican de inmediato con FLUSH PRIVILEGES o incluso sin él en versiones recientes de MySQL.

¿Qué permisos necesita un WordPress o un CMS típico?

WordPress y la mayoría de CMS funcionan perfectamente con SELECT, INSERT, UPDATE y DELETE. Los permisos de estructura (CREATE, ALTER, DROP) solo hacen falta durante la instalación o actualizaciones mayores, y puedes concederlos temporalmente.

Conclusión

Pocos cambios dan tanto por tan poco. Crear usuario MySQL con permisos limitados lleva minutos; proteger tus datos ante un incidente, no tiene precio. Aplica el mínimo privilegio, separa lectura y escritura, revisa de vez en cuando los permisos asignados y deja las credenciales administrativas fuera de producción. Y si buscas una base sólida sobre la que montar todo esto, en RedServicio.net ofrecemos hosting de calidad con soporte 24/7 para ayudarte a configurar y mantener tus bases de datos de forma segura, estemos o no detrás de tu proyecto. Tu web y tus datos se lo merecen.

📝

Equipo RedServicio

Artículos escritos y revisados por nuestro equipo técnico especializado en hosting e infraestructura web en España.

¿Listo para un hosting de verdad?

Servidores en España · Soporte 24/7 en español · Migración gratuita

Ver Planes desde 3,95€/mes →

Te puede interesar:

ClisecSeguridad informática

Página GratisCrea tu web gratis

Scroll al inicio