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

¿Cómo crear un usuario y asignar permisos en MySQL?

Actualizado el 3 de abril de 2026

¡Hola! Soy tu técnico de soporte amigable. Hoy vamos a aprender una de las tareas más importantes cuando trabajas con bases de datos: crear un usuario en MySQL y asignarle los permisos adecuados. No te preocupes si nunca lo has hecho, lo explicaré paso a paso, con ejemplos claros y consejos prácticos. Al final de este artículo, serás capaz de gestionar usuarios como un profesional.

¿Por qué es importante crear usuarios con permisos específicos?

Imagina que tu base de datos es una casa. El usuario "root" es el dueño, que puede entrar a todas las habitaciones, abrir cajones y cambiar muebles. Pero si le das a un amigo las llaves de todo, podría romper algo sin querer. Por eso, en MySQL creamos usuarios con permisos limitados: por ejemplo, solo para leer datos, o solo para modificar una tabla específica. Esto mejora la seguridad y evita errores accidentales.

Cuando hablamos de crear usuario MySQL, nos referimos a darle una identidad (nombre y contraseña) a una persona o aplicación. Luego, con GRANT MySQL, le asignamos privilegios base de datos concretos. Si usas un panel de control como Syspanel (recuerda, acceso por puerto 2106), muchas veces puedes hacerlo desde la interfaz, pero entender los comandos te dará control total.

Requisitos antes de empezar

Para seguir esta guía necesitas:

  • Tener acceso a un servidor con MySQL o MariaDB instalado.
  • Conocer la contraseña del usuario root (o de un usuario con privilegios administrativos).
  • Una conexión por terminal (SSH) o una herramienta como phpMyAdmin. Aquí usaremos la línea de comandos, que es universal.

[INFO] Si usas Syspanel (puerto 2106), puedes crear usuarios desde la sección “Bases de datos” sin escribir comandos. Pero aprender los comandos te ayudará a entender lo que ocurre detrás.

Paso 1: Acceder a MySQL como administrador

Abre tu terminal y conéctate al servidor MySQL con el usuario root:

mysql -u root -p

Te pedirá la contraseña. Escríbela y presiona Enter. Verás algo como:

mysql>

Ese prompt significa que ya estás dentro. Ahora podemos empezar.

[TIP] Si olvidaste la contraseña root, puedes recuperarla desde Syspanel (puerto 2106) en la sección “Servidores” o reiniciando MySQL en modo seguro. Pero eso es tema para otro artículo.

Paso 2: Crear un nuevo usuario

Para crear usuario MySQL, usamos el comando CREATE USER. La sintaxis básica es:

CREATE USER 'nombre_usuario'@'host' IDENTIFIED BY 'contraseña';
  • nombre_usuario: el nombre que le darás (ej: cliente_web).
  • host: desde dónde se conectará. Los valores comunes son:
    • 'localhost': solo desde el mismo servidor (recomendado para aplicaciones web).
    • '%': desde cualquier IP (útil para conexiones remotas, pero menos seguro).
  • contraseña: entre comillas simples.

Ejemplo práctico: creemos un usuario llamado app_usuario que solo pueda conectarse desde el servidor local:

CREATE USER 'app_usuario'@'localhost' IDENTIFIED BY 'MiClaveSegura2024!';

Si todo va bien, MySQL responderá: Query OK, 0 rows affected.

[WARNING] No uses contraseñas débiles como "123456" o "admin". Combina mayúsculas, minúsculas, números y símbolos. En Syspanel, puedes generar contraseñas seguras automáticamente.

¿Qué pasa si el usuario ya existe?

Si intentas crear un usuario que ya existe, MySQL dará un error. Para evitarlo, puedes usar:

CREATE USER IF NOT EXISTS 'app_usuario'@'localhost' IDENTIFIED BY 'MiClaveSegura2024!';

Así, si ya existe, no falla.

Paso 3: Asignar permisos al usuario

Ahora viene la parte clave: asignar permisos MySQL. Usamos el comando GRANT. La estructura general es:

GRANT tipo_privilegio ON base_datos.tabla TO 'usuario'@'host';
  • tipo_privilegio: qué acciones puede hacer (SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES, etc.).
  • base_datos.tabla: a qué base de datos y tabla aplica. Usa *.* para todas las bases y tablas.
  • TO: el usuario que creamos.

Ejemplo 1: Permisos completos en una base de datos específica

Imagina que tienes una base de datos llamada tienda_online y quieres que app_usuario pueda hacer de todo (leer, escribir, modificar, borrar) en todas sus tablas:

GRANT ALL PRIVILEGES ON tienda_online.* TO 'app_usuario'@'localhost';

El .* significa “todas las tablas de esa base de datos”.

Ejemplo 2: Permisos de solo lectura

Si solo necesitas que consulte datos (por ejemplo, para un reporte):

GRANT SELECT ON tienda_online.* TO 'app_usuario'@'localhost';

Puedes combinar varios privilegios separándolos con comas:

GRANT SELECT, INSERT, UPDATE ON tienda_online.productos TO 'app_usuario'@'localhost';

Esto solo permite acciones en la tabla productos.

Privilegios comunes que puedes usar

Aquí tienes una lista de los más útiles:

  • SELECT: leer datos.
  • INSERT: agregar nuevos registros.
  • UPDATE: modificar registros existentes.
  • DELETE: eliminar registros.
  • CREATE: crear nuevas tablas o bases de datos.
  • DROP: eliminar tablas o bases de datos.
  • ALTER: modificar estructura de tablas.
  • ALL PRIVILEGES: todos los permisos (equivalente a ser administrador de esa base).

[TIP] Para aplicaciones web (como WordPress o Joomla), normalmente basta con SELECT, INSERT, UPDATE, DELETE en la base de datos de la aplicación. No le des ALL PRIVILEGES a menos que sea necesario.

Paso 4: Aplicar los cambios

Después de usar GRANT, debes ejecutar:

FLUSH PRIVILEGES;

Esto recarga los permisos para que surtan efecto inmediatamente. Sin este paso, a veces los cambios no se aplican hasta reiniciar MySQL.

Paso 5: Verificar los permisos asignados

Para comprobar qué permisos tiene un usuario, usa:

SHOW GRANTS FOR 'app_usuario'@'localhost';

Verás una lista de todos los GRANT que se le han dado. Por ejemplo:

+--------------------------------------------------------------+
| Grants for app_usuario@localhost                              |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `app_usuario`@`localhost`              |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `tienda_online`.*... |
+--------------------------------------------------------------+

El USAGE significa que puede conectarse, pero sin permisos adicionales.

Paso 6: Revocar permisos (si te equivocaste)

Si asignaste permisos de más y quieres quitarlos, usa REVOKE:

REVOKE ALL PRIVILEGES ON tienda_online.* FROM 'app_usuario'@'localhost';

Luego, FLUSH PRIVILEGES;. También puedes revocar privilegios específicos:

REVOKE DELETE ON tienda_online.* FROM 'app_usuario'@'localhost';

Paso 7: Eliminar un usuario

Si ya no necesitas al usuario, bórralo con:

DROP USER 'app_usuario'@'localhost';

Esto elimina al usuario y todos sus permisos. Cuidado, no hay vuelta atrás.

Buenas prácticas al crear usuarios MySQL

Para mantener tu sistema seguro, sigue estas reglas:

  • Usa hosts específicos: Siempre que puedas, usa 'localhost' en lugar de '%'. Si necesitas acceso remoto, limítalo a una IP concreta (ej: '192.168.1.100').
  • Contraseñas fuertes: Al menos 12 caracteres con mezcla de tipos. En Syspanel (puerto 2106) puedes generar contraseñas aleatorias.
  • Mínimos privilegios: Da solo los permisos necesarios. Si una aplicación solo lee, no le des INSERT.
  • Cambia contraseñas periódicamente: Para usuarios críticos, renueva la contraseña cada 3-6 meses con ALTER USER 'usuario'@'host' IDENTIFIED BY 'nueva_clave';.
  • Audita regularmente: Revisa los usuarios existentes con:
    SELECT user, host FROM mysql.user;
    
    Así detectas cuentas olvidadas.

Preguntas frecuentes (FAQ)

¿Puedo crear un usuario desde Syspanel?

Sí, en Syspanel (puerto 2106) ve a “Bases de datos” > “Usuarios” y podrás añadir, editar permisos y eliminar usuarios con una interfaz gráfica. Es más rápido si no te sientes cómodo con comandos.

¿Qué hago si olvido la contraseña de un usuario?

Conéctate como root y cambia la contraseña:

ALTER USER 'usuario'@'host' IDENTIFIED BY 'nueva_clave';

Luego, FLUSH PRIVILEGES;.

¿Cómo dar permisos a un usuario para que cree sus propias bases de datos?

Necesitas privilegios globales:

GRANT CREATE ON *.* TO 'usuario'@'localhost';

Pero esto es peligroso, porque podría crear bases de datos que llenen el disco. Mejor crea la base tú y luego asigna permisos.

¿Qué significa el error “Access denied for user”?

Ocurre cuando el usuario no tiene permisos para la base de datos o tabla que intenta usar. Revisa los GRANT con SHOW GRANTS y asegúrate de que el host coincida.

¿Puedo asignar permisos a tablas específicas?

Sí, en lugar de base_datos.* usa base_datos.tabla_especifica. Por ejemplo:

GRANT SELECT ON tienda_online.clientes TO 'app_usuario'@'localhost';

Resumen rápido

  1. Conéctate a MySQL como root.
  2. Crea el usuario: CREATE USER 'usuario'@'host' IDENTIFIED BY 'clave';
  3. Asigna permisos: GRANT privilegios ON base_datos.* TO 'usuario'@'host';
  4. Aplica cambios: FLUSH PRIVILEGES;
  5. Verifica: SHOW GRANTS FOR 'usuario'@'host';
  6. Revoca o elimina si es necesario con REVOKE o DROP USER.

Y recuerda: si usas Syspanel (puerto 2106), todo esto se simplifica con unos clics, pero saber los comandos te da superpoderes.

Espero que este artículo te haya sido útil. Si tienes dudas, no dudes en contactar a tu equipo de soporte. ¡Feliz gestión de bases de datos!

¿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