
Crear usuarios MySQL y gestionar sus permisos desde la línea de comandos es una de esas tareas que cualquier administrador de servidores acaba haciendo con los ojos cerrados. O casi. En esta guía vas a aprender a crear usuarios MySQL, asignarles contraseñas seguras y otorgar privilegios de forma granular mediante CREATE USER y GRANT, todo desde la consola. Los pasos funcionan igual en MySQL que en MariaDB, y son la base para instalar o mantener aplicaciones como WordPress sin dejar la puerta abierta.
Cómo acceder a MySQL desde la línea de comandos
Primero hay que autenticarse en el servidor de bases de datos. Lo básico:
Con esto te conectas como root y MySQL te pedirá la contraseña de forma interactiva. Mejor así que pasarla en texto plano, evidentemente. ¿Y si el servidor es remoto? Añades el parámetro -h con la IP o el nombre del host:
Un detalle que despista a más de uno: en Debian o Ubuntu recientes el usuario root suele usar autenticación auth_socket, así que entrarás directamente con sudo mysql, sin contraseña. Cuando estés dentro verás el prompt mysql>. Ahí ya puedes lanzar consultas SQL. Para comprobar que todo va bien, ejecuta SHOW DATABASES; y verás las bases disponibles.
Ojo con esto: toda sentencia SQL termina en punto y coma. Si te olvidas, el cliente se quedará esperando la continuación en la línea siguiente y pensarás que se ha colgado. No se ha colgado. Te falta el «;».
Crear usuarios MySQL: sintaxis y ejemplos prácticos
La sintaxis moderna es sencilla y permite definir la contraseña en la propia sentencia:
La parte @’localhost’ define desde qué host puede conectarse ese usuario. Y aquí está lo importante, lo que de verdad afecta a la seguridad:
- ‘usuario’@’localhost’: solo desde el propio servidor.
- ‘usuario’@’192.168.1.25’: únicamente desde esa IP concreta.
- ‘usuario’@’%’: desde cualquier host. Útil, sí, pero arriesgado si el puerto 3306 está expuesto a Internet.
Algunos ejemplos para situaciones reales:
El segundo permite conexiones desde cualquier IP del rango 10.0.0.x, algo muy habitual en redes internas. Si lo que necesitas es cambiar la contraseña de un usuario ya existente, tienes ALTER USER:
Un consejo de andar por casa pero que sigue sin cumplirse tanto como debería: no reutilices contraseñas entre usuarios. Y apuesta por claves largas, con mayúsculas, números y símbolos. MySQL además trae validación de complejidad si tienes activo el plugin validate_password.
Otorgar permisos con GRANT: privilegios globales, de base de datos y de tabla
GRANT es el comando que decide qué puede hacer cada usuario. Los privilegios se conceden en tres niveles: globales, de base de datos y de tabla.
Privilegios globales
Afectan a todas las bases de datos del servidor. Con moderación, por favor. Muy poca gente necesita este nivel:
La cláusula WITH GRANT OPTION permite que ese usuario transfiera sus privilegios a otros. Piénsalo antes de usarla; resérvala para cuentas de administración, y pocas.
Privilegios de base de datos
El nivel más habitual. El usuario de WordPress, por ejemplo:
O, si prefieres no afinar tanto, todos los privilegios sobre una base concreta:
Privilegios de tabla
El nivel más fino, aplicado a una tabla específica:
Después de cualquier cambio de permisos, ejecuta FLUSH PRIVILEGES; para que el servidor recargue sus tablas de permisos. Y verifica con SHOW GRANTS FOR ‘usuario’@’localhost’;. Si necesitas una referencia más completa de comandos y buenas prácticas, en RedServicio (redservicio.net) encontrarás ayuda profesional para cualquier problema técnico con MySQL y tu servidor.
Verificar, modificar y revocar permisos de un usuario
Creado el usuario y asignados los privilegios, toca auditar. ¿Qué permisos tiene realmente esta cuenta? El comando que responde a eso es SHOW GRANTS, que devuelve la lista exacta de lo que se le ha otorgado:
SHOW GRANTS FOR ‘usuario’@’localhost’;
Fíjate en el detalle: si el resultado incluye ALL PRIVILEGES junto a WITH GRANT OPTION, ese usuario puede transferir sus permisos a otros. En producción, eso conviene revisarlo dos veces. ¿Quieres ver todos los usuarios de golpe? Consulta directamente la base mysql:
SELECT user, host FROM mysql.user;
Para ampliar permisos no hace falta recrear la cuenta. Basta con volver a ejecutar GRANT con los privilegios nuevos. Por ejemplo, para permitir actualizaciones sobre una tabla concreta:
GRANT UPDATE ON mi_base.mi_tabla TO ‘usuario’@’localhost’;
Y para quitar, REVOKE. La sintaxis es simétrica a GRANT, así que si ya escribiste el primero, este te saldrá solo. Retirar la capacidad de borrar datos sería:
REVOKE DELETE ON mi_base.* FROM ‘usuario’@’localhost’;
Un par de apuntes que me han salvado más de un susto. Si tocas los permisos manualmente en las tablas del sistema, ejecuta después FLUSH PRIVILEGES; y verifica con SHOW GRANTS que el resultado es el esperado. Y cuidado con esto otro: hay quien aplica REVOKE sobre *.* creyendo que afecta a una sola base. No. El alcance debe coincidir exactamente con el usado en el GRANT original.
Eliminar usuarios y buenas prácticas de seguridad
Cuando una cuenta ya no sirve, elimínala con DROP USER. Las cuentas huérfanas acaban siendo vectores de ataque; he visto servidores con usuarios de proyectos abandonados hacía años:
DROP USER ‘usuario’@’localhost’;
Ojo: el par usuario-host debe coincidir exactamente. Si existen variantes como ‘usuario’@’%’ y ‘usuario’@’localhost’, tendrás que borrarlas una a una. La consulta sobre mysql.user que vimos antes te sirve para localizarlas.
Consejos de seguridad esenciales
- Principio de mínimo privilegio: concede solo lo necesario. Un usuario de WordPress necesita SELECT, INSERT, UPDATE y DELETE, no ALL PRIVILEGES global.
- Limita el host: usa ‘usuario’@’localhost’ en lugar de ‘usuario’@’%’ siempre que la aplicación esté en el mismo servidor.
- Contraseñas robustas: activa el plugin validate_password en MySQL 8 para forzar una complejidad mínima.
- Evita el uso de root: jamás conectes aplicaciones con root. Crea usuarios dedicados por aplicación y listo.
- Audita periódicamente: revisa mysql.user y elimina cuentas inactivas o de antiguos proyectos.
- Copias de seguridad: haz volcado con mysqldump antes de cambios masivos de permisos. Siempre.
Queda algo más: mantén MySQL actualizado y, si no es estrictamente necesario, deshabilita el acceso remoto al puerto 3306, ya sea con el firewall o mediante la variable bind-address en el fichero de configuración.
Conclusión: dominar la gestión de usuarios en MySQL
Crear usuarios MySQL y administrar sus permisos desde la línea de comandos es una competencia básica para cualquier webmaster o administrador de servidores. En esta guía hemos recorrido el ciclo completo: creación de cuentas con CREATE USER, asignación de privilegios con GRANT, auditoría mediante SHOW GRANTS, ajuste fino con REVOKE y eliminación segura con DROP USER.
La clave, al final, está en el mínimo privilegio, en documentar los usuarios existentes y en revisar de vez en cuando que no queden cuentas con permisos de más. Estas rutinas, sumadas a contraseñas fuertes y acceso restringido por host, reducen mucho la superficie de ataque de tu servidor de bases de datos.
¿Necesitas ayuda con la configuración de tu servidor, la migración de bases de datos o errores de permisos en MySQL? En RedServicio (redservicio.net) encontrarás asistencia profesional para cualquier problema técnico con MySQL, WordPress y tu infraestructura de hosting.

