Puntos clave
- Nunca utilices la cuenta raíz para aplicaciones o tareas cotidianas. En su lugar, crea usuarios específicos con privilegios limitados para reducir el riesgo.
- Todo el proceso gira en torno a dos comandos principales:
CREATE USERpara crear una nueva cuenta yGRANTpara dar a ese usuario permisos sobre una base de datos o tabla concretas. - Utiliza regularmente comandos como
REVOKEpara eliminar permisos yDROP USERpara eliminar cuentas que ya no son necesarias.
La gestión de usuarios es una de las cosas más importantes que puedes hacer para construir y mantener la seguridad y la estructura de tus bases de datos MySQL. En lugar de permitir que todas las aplicaciones o desarrolladores accedan a través de la cuenta raíz, siempre debes configurar los usuarios con los controles necesarios y, si procede, limitar sus niveles de permiso sólo a lo que necesiten.
Al proporcionar un acceso limitado a los usuarios, reduces el riesgo y proteges la información sensible, al tiempo que mantienes el control sobre quién puede hacer qué en la base de datos.
En este tutorial, detallaremos cómo crear un usuario en MySQL de principio a fin, e incluso te mostraremos cómo crear un usuario con contraseña y concederle los privilegios adecuados.
Además, detallaremos algunas tareas adicionales de gestión de usuarios, como cambiar contraseñas, revocar accesos o eliminar cuentas.
- Requisitos previos
- Paso 1: Conéctate a MySQL
- Paso 2: Crear un nuevo usuario en MySQL
- Paso 3: Conceder privilegios a un usuario MySQL
- Paso 4: Probar los nuevos usuarios de MySQL
- Tareas adicionales de gestión de usuarios
- Gestión de usuarios MySQL en Cloudways con Database Manager
- Errores comunes y soluciones
- Buenas prácticas para la gestión de usuarios MySQL
Requisitos previos
Antes de empezar a crear un usuario MySQL, vamos a asegurarnos de que lo básico está cubierto. Como mínimo, necesitarás
- Un servidor MySQL (o MariaDB) en funcionamiento – MySQL ya debería estar instalado y funcionando. Si utilizas XAMPP, WAMP o MAMP, ten en cuenta que estos paquetes suelen incluir MariaDB, que funciona de la misma manera para los comandos que vamos a cubrir. Si has instalado MySQL directamente, funciona igual de bien.
- Una cuenta con privilegios administrativos – Normalmente la cuenta raíz, ya que necesitarás plenos derechos para crear nuevos usuarios y asignarles permisos.
- Acceso a una línea de comandos o terminal – Casi todo en este tutorial se hará mediante comandos. En Windows, puede ser Símbolo del sistema (CMD), PowerShell o la Shell de XAMPP. En Linux o macOS, utilizarás el terminal.
Eso es todo lo que necesitas para seguir.
Para este tutorial, trabajaré en una máquina Windows utilizando XAMPP con acceso a MySQL/MariaDB a través del símbolo del sistema (CMD). Si estás en Linux o macOS, no te preocupes, los comandos que cubriremos son exactamente los mismos, sólo que los ejecutarás desde tu terminal.
Paso 1: Conéctate a MySQL
Lo primero que tienes que hacer es acceder a MySQL con una cuenta que tenga los permisos adecuados. La mayoría de las veces, será el usuario root, ya que tiene todos los privilegios y puede crear o gestionar otras cuentas.
Para ello:
- En Windows (con XAMPP), puedes hacer clic en el botón Shell dentro del Panel de Control de XAMPP.

- En Linux o macOS, sólo tienes que abrir el terminal.
Una vez dentro, escribe el siguiente comando y pulsa Intro:
mysql -u root -p
He aquí lo que significa cada parte:
- mysql → indica al sistema que quieres utilizar el cliente MySQL.
- -u root → especifica el nombre de usuario (root en este caso).
- -p → indica a MySQL que te pida una contraseña.
Después de ejecutar el comando, se te pedirá que introduzcas la contraseña de root. Si utilizas XAMPP en Windows, la cuenta raíz por defecto no suele tener contraseña (basta con pulsar Intro).

Si tiene éxito, verás algo como esto:
Bienvenido al monitor de MariaDB. Los comandos terminan en ; o \g.
Tu id de conexión MariaDB es 8
Versión del servidor: 10.4.28-MariaDB mariadb.org distribución binaria
MariaDB [(ninguno)]>
Esta indicación(MariaDB [(none)]>) significa que ahora estás dentro del intérprete de comandos MySQL/MariaDB y listo para empezar a ejecutar comandos.
En Linux o macOS
Abre tu terminal y ejecuta
mysql -u root -p
Introduce tu contraseña de root cuando se te solicite. Si todo está configurado correctamente, verás un mensaje similar en mysql> o MariaDB>.
Paso 2: Crear un nuevo usuario en MySQL
Ahora que has iniciado sesión en el intérprete de comandos MySQL, vamos a crear un nuevo usuario con una contraseña, vamos a hacer dos: uno que funcione localmente (en el mismo servidor) y otro que pueda conectarse remotamente. De esta forma, entenderás ambos casos de uso.
Sintaxis de CREAR USUARIO
Este es el comando para mysql crear usuario con contraseña:
CREAR USUARIO ‘nombredeusuario’@’host’ IDENTIFICADO POR ‘contraseña’;
- username → el nombre del nuevo usuario de MySQL.
- host → indica a MySQL desde dónde puede conectarse este usuario.
- contraseña → la contraseña segura de la cuenta.
1. Crear un usuario para acceso local
Ejecuta este comando dentro del intérprete de comandos de MySQL:
¡CREAR USUARIO 'localuser'@'localhost' IDENTIFICADO POR 'LocalPass123!
Esto crea un usuario llamado localuser que sólo puede conectarse desde el mismo servidor donde está instalado MySQL.
2. Crear un usuario para el acceso remoto
Ahora, vamos a crear otro usuario que pueda conectarse desde fuera del servidor:
¡CREAR USUARIO 'remoteuser'@'%' IDENTIFICADO POR 'RemotePass123!
Aquí, % significa «permitir conexiones desde cualquier host». Si quieres bloquearlo a una IP concreta para mayor seguridad, sustituye % por esa IP, por ejemplo:
¡CREAR USUARIO 'remoteuser'@'192.168.1.50' IDENTIFICADO POR 'RemotePass123!

Los dos mensajes de Consulta OK que ves en la captura de pantalla anterior significan que ambos usuarios se han creado correctamente en tu instancia MariaDB.
Importancia de utilizar una contraseña segura
Cuando crees usuarios MySQL, utiliza siempre una contraseña fuerte y única. Las credenciales débiles son una de las formas más comunes de que las bases de datos se vean comprometidas. Una buena contraseña debería
- Contienen letras mayúsculas y minúsculas.
- Incluye números y caracteres especiales.
- Tener al menos 12-16 caracteres.
- No se puede reutilizar desde otra cuenta.
En este momento, tanto localuser como remoteuser existen en MySQL, pero aún no tienen permiso para hacer nada. En el siguiente paso, les concederemos los privilegios que necesitan.
Paso 3: Conceder privilegios a un usuario MySQL
Crear un usuario es sólo el primer paso: por defecto, los nuevos usuarios no tienen permisos. Para que realmente puedan hacer algo (como crear bases de datos, leer/escribir tablas o gestionar usuarios), tendrás que concederles privilegios.
En primer lugar, vamos a crear la base de datos con la que vamos a trabajar. Ejecuta el siguiente comando en el intérprete de comandos de MySQL:
CREAR BASE DE DATOS testdb;
Así nos aseguramos de que la base de datos existe antes de empezar a asignar permisos.
Sintaxis de GRANT
El formato general es el siguiente:
CONCEDER privilegios EN base de datos.tabla A ‘nombredeusuario’@’host’;
- privilegios → qué acciones puede realizar el usuario(SELECCIONAR, INSERTAR, TODOS LOS PRIVILEGIOS, etc.).
- database.table → donde se aplican esos privilegios(mydb.* significa todas las tablas de mydb).
- ‘nombredeusuario’@’host’ → el usuario MySQL que creaste anteriormente.
Tras la concesión, corre siempre:
PRIVILEGIOS DE DESCARGA;
Esto obliga a MySQL a recargar los permisos actualizados.
1. Conceder privilegios al usuario local
Vamos a permitir que localuser gestione completamente una base de datos llamada testdb. Ejecuta los siguientes comandos uno a uno dentro del mismo intérprete de comandos(MariaDB [(none)]> prompt):
CONCEDE TODOS LOS PRIVILEGIOS SOBRE testdb.* A 'localuser'@'localhost'; PRIVILEGIOS DE DESCARGA;
Esto significa que localuser puede crear, actualizar y eliminar tablas/datos dentro de testdb, pero nada más fuera de ella.

2. Conceder privilegios al usuario remoto
En el caso de los usuarios remotos, digamos que quieres que tengan acceso de sólo lectura a la misma base de datos. De esta forma, podrán consultar los datos pero no modificarlos. Ejecuta también estos comandos uno a uno:
GRANT SELECT ON testdb.* A 'remoteuser'@'%'; PRIVILEGIOS DE DESCARGA;
Esto garantiza que el usuario remoto pueda consultar los datos a distancia, pero no modificarlos, para evitar el riesgo de borrar o sobrescribir algo accidentalmente.

3. Comprobación de los privilegios concedidos
En cualquier momento, puedes comprobar qué permisos tiene un usuario ejecutando los comandos que se indican a continuación:
MOSTRAR SUBVENCIONES PARA 'usuariolocal'@'localhost';

Como puedes ver en la captura de pantalla, el usuariolocal@localhost tiene ahora TODOS los privilegios sobre la base de datos testdb.
MOSTRAR SUBVENCIONES PARA 'usuario remoto'@'%';

remoteuser@% sólo tiene privilegios SELECT en la base de datos testdb.
Con esto, tus dos usuarios tienen ahora funciones diferentes:
- localuser → control total sobre testdb.
- remoteuser → acceso de sólo lectura a testdb.
Paso 4: Probar los nuevos usuarios de MySQL
Crear usuarios y conceder privilegios es sólo la mitad del trabajo: también debes verificar que los permisos funcionan como se espera. A continuación te explicamos cómo puedes comprobar tanto el usuario local como el usuario remoto.
1. Entra como usuario local
Desde tu shell XAMPP (sal primero de tu sesión MariaDB actual escribiendo exit;), inicia sesión con:
mysql -u usuariolocal -p
Cuando se te solicite, introduce la contraseña que estableciste anteriormente(LocalPass123!).

Como puedes ver, ahora estoy conectado como usuario local.
Una vez dentro, pasa a la base de datos testdb :
USE testdb;

Intenta crear una tabla sencilla:
CREAR TABLA tabla_de_muestra ( id INT PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(50) );
Si la tabla se crea correctamente, significa que localuser tiene todos los privilegios sobre testdb.

Como puedes ver en la captura de pantalla, el mensaje Consulta OK confirma que la tabla se ha creado correctamente.
2. Inicia sesión como usuario remoto
Todavía en el shell de XAMPP, cierra la sesión actual ( exit;) e inicia sesión con:
mysql -u usuario remoto -p
Introduce la contraseña que estableciste(RemotePass123!).

Cambia a la misma base de datos:
USAR testdb;
Ahora intenta correr:
SELECT * FROM tabla_de_muestra;
Esto debería funcionar, aunque la tabla esté vacía.

Pero si intentas insertar datos:
INSERT INTO tabla_de_muestras (nombre) VALUES ('Nombre de la prueba');
Verás un error de permiso denegado, que confirma que el usuario remoto sólo tiene privilegios SELECT.

Probando así, habrás confirmado que tus permisos se aplican correctamente:
- El usuario local puede gestionar completamente testdb.
- El usuario remoto sólo tiene acceso de lectura.
Tareas adicionales de gestión de usuarios
La creación de usuarios y la concesión de privilegios son una parte importante de la seguridad de la base de datos, pero también tendrás que gestionar esos usuarios a lo largo del tiempo. A medida que cambien las funciones o finalicen los proyectos, puede que necesites actualizar una contraseña, eliminar determinados permisos o incluso eliminar una cuenta por completo.
Así es como se gestionan esas tareas.
Cambiar la contraseña de un usuario
Si un usuario necesita actualizar su contraseña, puedes hacerlo fácilmente desde el intérprete de comandos de MySQL. Se trata de una tarea habitual por seguridad o cuando una contraseña se ha visto comprometida.
Sintaxis:
ALTER USER 'nombredeusuario'@'host' IDENTIFIED BY '¡NuevaContraseñaSegura!
Ejemplo:
Para cambiar la contraseña de localuser a ¡NuevaContraseña!456, ejecutarías
ALTER USER 'localuser'@'localhost' IDENTIFIED BY '¡NuevaContraseña!456';
Pero antes, para cambiar una contraseña o gestionar usuarios, debes iniciar sesión como una cuenta con privilegios administrativos, como el usuario root.
Así que inicia sesión como usuario root (mysql -u root -p) y luego ejecuta el comando compartido anteriormente.

Después de ejecutar el comando, cierra la sesión actual(exit;) e intenta volver a entrar con la contraseña antigua(mysql -u localuser -p). Debería fallar.

A continuación, intenta acceder con la nueva contraseña. Si puedes entrar, ¡sabrás que el cambio se ha realizado correctamente!

La nueva contraseña funcionó a la perfección.
Revocación de privilegios
Puede que quieras quitar los permisos a un usuario sin eliminar la cuenta. El comando REVOKE es lo contrario de GRANT y te permite eliminar privilegios específicos.
Sintaxis:
REVOKE privileges ON database.table FROM 'nombredeusuario'@'host';
Ejemplo:
Para revocar la capacidad del usuario local de crear o eliminar datos, pero seguir permitiéndole leerlos, puedes eliminar los privilegios INSERT, UPDATE y DELETE ejecutando el comando que se indica a continuación. Pero primero inicia sesión como usuario root.
REVOKE INSERT, UPDATE, DELETE ON testdb.* FROM 'localuser'@'localhost';
Después, asegúrate de ejecutar FLUSH PRIVILEGES; para aplicar los cambios.

Para comprobarlo, vuelve a iniciar sesión como usuario local (mysql -u localuser -p) e intenta insertar algunos datos. Para ello, selecciona la base de datos con este comando:
USE testdb;
Verás el mensaje«Base de datos modificada«, que confirma que ahora estás trabajando en la base de datos testdb.
Inserta los datos con este comando:
INSERT INTO tabla_de_muestras (nombre) VALUES ('Datos de prueba');
El comando debería fallar, y verás un error de permiso denegado, que te indica que el comando REVOKE funcionó como estaba previsto.

Eliminar una cuenta de usuario
Si una cuenta ya no es necesaria, es una buena práctica de seguridad eliminarla por completo. El comando ELIMINAR USUARIO elimina la cuenta de usuario y todos sus privilegios asociados.
Sintaxis:
DROP USUARIO 'nombredeusuario'@'host';
Ejemplo:
Para eliminar la cuenta de usuario remoto que creaste anteriormente, simplemente ejecuta el comando, pero accediendo como usuario root.
DROP USUARIO 'usuario remoto'@'%';

También puedes dar de baja a varios usuarios a la vez separándolos con comas. Pero ten cuidado, ya que esta acción es irreversible.
Para comprobarlo, intenta acceder con el usuario eliminado(mysql -u remoteuser -p). Deberías obtener un error de Acceso denegado, confirmando que la cuenta ha sido completamente eliminada del sistema.

Y ya está… ahora ya sabes cómo hacerlo:
- Establece una conexión segura con privilegios administrativos.
- Crea cuentas de usuario dedicadas tanto para el acceso local como para el remoto.
- Concede permisos precisos a cada usuario, siguiendo el principio del menor privilegio.
- Mantén las cuentas de usuario cambiando las contraseñas, revocando el acceso y eliminando de forma segura las cuentas cuando ya no se necesiten.
Gestión de usuarios MySQL en Cloudways con Database Manager
Cuando trabajas en una configuración MySQL local, normalmente creas usuarios y les concedes privilegios a través de la línea de comandos. En Cloudways, puedes hacer lo mismo utilizando el Gestor de Bases de Datos integrado en nuestra plataforma.
Acceder al Gestor de Bases de Datos
- Conéctate a la Plataforma Cloudways.
- Navega hasta Aplicaciones > Tu App > Gestión de Aplicaciones.
- En Detalles de acceso, haz clic en Iniciar Gestor de bases de datos.

Errores comunes y soluciones
Aunque sigas los pasos correctamente, trabajar con usuarios MySQL no siempre va como la seda. Puedes encontrarte con problemas de permisos, problemas de conexión o errores que parecen confusos a primera vista. A continuación te mostramos algunos de los errores más comunes que probablemente encontrarás al crear o gestionar usuarios MySQL, junto con soluciones prácticas para resolverlos rápidamente.
1. Acceso denegado para el usuario
Este error suele aparecer como:
ERROR 1045 (28000): Acceso denegado para el usuario ‘nombredeusuario’@’localhost’
Causa: Credenciales incorrectas, incompatibilidad de host o privilegios insuficientes.
Arréglalo: Comprueba dos veces el nombre de usuario y la contraseña.
Ejecuta: SHOW GRANTS FOR ‘nombredeusuario’@’localhost’; para confirmar los privilegios.
Si es necesario, restablece la contraseña con:
ALTERAR USUARIO 'nombredeusuario'@'localhost' IDENTIFICADO POR '¡NuevoPass123!
2. El usuario no puede conectarse remotamente
El error tiene este aspecto:
ERROR 1130 (HY000): El host ‘DIRECCIÓN_IP’ no tiene permiso para conectarse a este servidor MySQL
Causa: MySQL por defecto sólo permite conexiones locales.
Corrección: Conceder acceso a todos los hosts con %:
¡CREAR USUARIO 'nombreusuario'@'%' IDENTIFICADO POR 'UsuarioPass123! CONCEDE TODOS LOS PRIVILEGIOS SOBRE dbname.* A 'nombreusuario'@'%'; PRIVILEGIOS DE DESCARGA;
Asegúrate de que el cortafuegos del servidor y la dirección de enlace mysqld.cnf están configurados para permitir conexiones remotas.
3. Error 1396: Operación CREAR USUARIO Fallida
ERROR 1396 (HY000): Operación CREAR USUARIO fallida para ‘nombredeusuario’@’localhost’
Causa: El usuario ya existe en MySQL.
Arréglalo: Primero, elimina el usuario antiguo si no es necesario:
DROP USUARIO 'nombredeusuario'@'localhost';
O, si el usuario existe pero sólo quieres cambiar la contraseña/privilegios, utiliza ALTER USER en lugar de CREAR USUARIO:
ALTERAR USUARIO 'nombredeusuario'@'localhost' IDENTIFICADO POR '¡NuevoPass123! GRANT SELECT, INSERT ON dbname.* A 'nombredeusuario'@'localhost';
Haz que tu usuario MySQL trabaje para ti
Disfruta de un alojamiento PHP diseñado para aplicaciones MySQL. Con una configuración rápida, acceso seguro y copias de seguridad diarias, tendrás todo lo que necesitas para que tus proyectos funcionen sin problemas.
Buenas prácticas para la gestión de usuarios MySQL
Gestionar usuarios MySQL no consiste sólo en crear cuentas, sino también en mantener tu base de datos segura y eficiente. Seguir las mejores prácticas ayuda a evitar accesos no autorizados y reduce el riesgo de fugas de datos o daños accidentales.
Aquí tienes algunas pautas clave que debes tener en cuenta:
- Utiliza contraseñas fuertes y únicas – Asigna siempre contraseñas complejas y únicas a cada usuario de MySQL. Esto evita los ataques de fuerza bruta y mantiene seguras las cuentas.
- Evita utilizar root para las aplicaciones – La cuenta root tiene control total sobre la base de datos. En su lugar, crea usuarios separados para tus aplicaciones con privilegios limitados.
- Concede sólo los privilegios necesarios – Sigue el principio del menor privilegio. Por ejemplo, si un usuario sólo necesita leer datos, no le des derechos de escritura ni de administrador.
- Restringe el acceso remoto cuando sea posible – Limita los usuarios a localhost a menos que las conexiones remotas sean absolutamente necesarias. Si tienes que permitir el acceso remoto, pon en la lista blanca sólo determinadas IP.
Aplicando estas prácticas, crearás un entorno MySQL más seguro a la vez que mantienes la gestión de usuarios sencilla y controlada.
Preguntas frecuentes
1. ¿Cómo crear un nuevo usuario en MySQL?
Ejecuta el comando:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
Esto añade un nuevo usuario MySQL con las credenciales dadas.
2. ¿Cómo crear un nuevo usuario en MySQL con inicio de sesión?
Primero creas el usuario y luego le concedes privilegios para que pueda conectarse:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
FLUSH PRIVILEGES;
Esto garantiza que el usuario pueda conectarse y tenga acceso completo.
3. ¿Cómo doy acceso a un usuario a la base de datos MySQL?
Utiliza la sentencia GRANT para asignar privilegios:
GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.* TO 'username'@'localhost';
FLUSH PRIVILEGES;
Sustituye db_name por el nombre de tu base de datos.
4. ¿Cómo crear un usuario?
En MySQL, puedes crear un usuario con:
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
La dirección % permite el acceso remoto; utiliza localhost si el acceso debe ser sólo local.
Start Growing with Cloudways Today.
Our Clients Love us because we never compromise on these
Abdul Rehman
Abdul es un experto en tecnología, aficionado al café y al marketing creativo al que le encanta estar al día de las últimas actualizaciones de software y aparatos tecnológicos. También es un hábil escritor técnico capaz de explicar conceptos complejos de forma sencilla para un público amplio. Abdul disfruta compartiendo sus conocimientos sobre el sector de la Nube a través de manuales de usuario, documentación y entradas de blog.