
📅 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!’;
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
- Limita el host: evita ‘@%’ salvo que sea imprescindible. Si la aplicación está en el mismo servidor, basta localhost.
- Rota contraseñas: cámbialas al menos cada 90 días, y siempre cuando un desarrollador deja el equipo.
- Revoca permisos que no se usan: con REVOKE puedes ajustar sobre la marcha: REVOKE DELETE ON mi_tienda.* FROM ‘usuarioweb’@’localhost’;
- Elimina usuarios obsoletos: DROP USER ‘usuarioweb’@’localhost’; cuando un proyecto o integración termine.
- No uses root en la aplicación: nunca, jamás, pongas credenciales administrativas en el wp-config.php, el .env o similar.
- Guarda credenciales fuera del directorio web: que no queden accesibles por HTTP si la configuración del servidor falla.
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 →