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

Cómo crear un usuario y asignar privilegios en MySQL

Actualizado el 28 de diciembre de 2025

¡Hola! Soy tu técnico de soporte amigable. Hoy vamos a aprender una tarea fundamental para gestionar tus bases de datos: cómo crear un usuario y asignarle privilegios en MySQL.

Si alguna vez te has preguntado qué permisos necesita cada aplicación o cómo evitar que alguien borre datos por error, este artículo es para ti. Te guiaré paso a paso, desde lo más básico hasta ejemplos prácticos, todo en un lenguaje claro y sencillo.


¿Qué es un usuario en MySQL y por qué necesitas crear uno?

Cuando instalas MySQL, el sistema crea un usuario administrador llamado root. Este usuario tiene todos los poderes: puede crear bases de datos, borrarlas, modificar tablas, etc. Pero en el mundo real, no es buena práctica usar siempre root para todo.

Imagina que tienes una tienda online, un blog y un foro. Cada aplicación necesita acceso a su propia base de datos. Si usas root para todo, cualquier error en una aplicación podría afectar a las demás. Además, si alguien descubre la contraseña de root, tendría acceso completo a todo tu sistema.

Por eso, lo mejor es crear usuarios específicos para cada proyecto y asignarles solo los permisos que realmente necesitan. Esto se llama principio de mínimo privilegio y es una de las mejores prácticas de seguridad.


Requisitos previos

Antes de empezar, asegúrate de tener:

  • Acceso al servidor donde está instalado MySQL. Puede ser tu máquina local, un VPS o un panel como Syspanel (recuerda, el puerto es el 2106).
  • Credenciales de root de MySQL (usuario root y su contraseña).
  • Acceso a la terminal o a una herramienta como phpMyAdmin (aunque aquí usaremos comandos).

[INFO] Si usas Syspanel (antes HestiaCP), puedes acceder a la terminal desde el panel o mediante SSH. El puerto estándar para el panel es el 2106.


Paso 1: Conectarte a MySQL como root

Abre tu terminal y escribe el siguiente comando:

mysql -u root -p

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

Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql>

¡Ya estás dentro! Ahora puedes ejecutar comandos SQL.


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 quieras darle (ej: miblog).
  • host: Desde dónde se conectará. Puede ser:
    • 'localhost' – solo desde el mismo servidor.
    • '%' – desde cualquier IP (cuidado con la seguridad).
    • '192.168.1.%' – solo desde una subred específica.
  • contraseña: La clave que usará para acceder.

Ejemplo práctico: Quieres crear un usuario llamado lector que solo acceda desde tu servidor local.

CREATE USER 'lector'@'localhost' IDENTIFIED BY 'MiClaveSegura123!';

[TIP] Usa contraseñas largas y complejas. Combina mayúsculas, minúsculas, números y símbolos.


Paso 3: Asignar privilegios al usuario

Una vez creado el usuario, debemos asignar privilegios MySQL. Existen muchos tipos de permisos, pero los más comunes son:

PrivilegioDescripción
ALL PRIVILEGESTodos los permisos (equivalente a root en esa base de datos)
SELECTSolo leer datos
INSERTAñadir nuevos registros
UPDATEModificar registros existentes
DELETEEliminar registros
CREATECrear tablas o bases de datos
DROPEliminar tablas o bases de datos

Para asignar permisos, usamos el comando GRANT:

GRANT privilegio1, privilegio2 ON base_de_datos.tabla TO 'usuario'@'host';
  • base_de_datos.tabla: Puedes especificar una base de datos concreta (ej: midb.* para todas las tablas) o *.* para todas las bases de datos.
  • TO: El usuario que recibe los permisos.

Ejemplos de asignación de privilegios

Caso 1: Usuario que solo puede leer una base de datos

GRANT SELECT ON midb.* TO 'lector'@'localhost';

Caso 2: Usuario que puede leer, insertar y modificar (pero no borrar)

GRANT SELECT, INSERT, UPDATE ON midb.* TO 'editor'@'localhost';

Caso 3: Usuario con control total sobre una base de datos (pero no sobre otras)

GRANT ALL PRIVILEGES ON midb.* TO 'admin_midb'@'localhost';

Caso 4: Usuario que puede gestionar varias bases de datos

GRANT ALL PRIVILEGES ON `base1`.*, `base2`.* TO 'gestor'@'localhost';

[WARNING] No uses GRANT ALL PRIVILEGES ON *.* a menos que sea estrictamente necesario. Eso le daría al usuario control absoluto sobre todo MySQL, como si fuera root.


Paso 4: Aplicar los cambios

Después de asignar los privilegios, siempre debes ejecutar:

FLUSH PRIVILEGES;

Esto le dice a MySQL que recargue la tabla de permisos. Sin este comando, los cambios podrían no ser efectivos hasta reiniciar el servicio.


Paso 5: Verificar los privilegios del usuario

Para comprobar qué permisos tiene un usuario, usa:

SHOW GRANTS FOR 'nombre_usuario'@'host';

Por ejemplo:

SHOW GRANTS FOR 'lector'@'localhost';

Te mostrará algo como:

+---------------------------------------------------+
| Grants for lector@localhost                        |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO `lector`@`localhost`         |
| GRANT SELECT ON `midb`.* TO `lector`@`localhost`  |
+---------------------------------------------------+

El USAGE significa que el usuario puede conectarse, pero no tiene permisos especiales globales.


Paso 6: Revocar privilegios (si es necesario)

Si te equivocas o quieres quitar permisos, usa REVOKE:

REVOKE privilegio ON base_de_datos.tabla FROM 'usuario'@'host';

Ejemplo: Quitar el permiso de borrar al usuario editor.

REVOKE DELETE ON midb.* FROM 'editor'@'localhost';

No olvides hacer FLUSH PRIVILEGES; después.


Paso 7: Eliminar un usuario

Si ya no necesitas un usuario, puedes borrarlo con:

DROP USER 'nombre_usuario'@'host';

Ejemplo:

DROP USER 'lector'@'localhost';

[WARNING] Al eliminar un usuario, también se borran todos sus privilegios. Asegúrate de que no lo necesitas para nada importante.


Ejemplo completo: Crear un usuario para una aplicación web

Vamos a simular que tienes una aplicación llamada "MiTienda" y necesitas un usuario que pueda gestionar su base de datos mitienda_db.

  1. Conéctate a MySQL como root.
  2. Crea la base de datos (si no existe):
CREATE DATABASE mitienda_db;
  1. Crea el usuario:
CREATE USER 'mitienda_user'@'localhost' IDENTIFIED BY 'Tienda2024#Segura';
  1. Asigna privilegios completos sobre la base de datos:
GRANT ALL PRIVILEGES ON mitienda_db.* TO 'mitienda_user'@'localhost';
  1. Aplica los cambios:
FLUSH PRIVILEGES;
  1. Verifica:
SHOW GRANTS FOR 'mitienda_user'@'localhost';

¡Listo! Ahora tu aplicación puede conectarse con ese usuario y solo tendrá acceso a mitienda_db.


Buenas prácticas y consejos de seguridad

  • Usa contraseñas fuertes: Evita 123456 o password. Genera claves aleatorias con herramientas como openssl rand -base64 12.
  • Limita el host: Siempre que puedas, usa 'localhost' en lugar de '%'. Si necesitas acceso remoto, especifica la IP exacta.
  • No compartas el usuario root: Crea usuarios específicos para cada tarea.
  • Revoca permisos que no uses: Si una aplicación ya no necesita borrar, quítale ese privilegio.
  • Haz copias de seguridad: Antes de hacer cambios importantes, respalda tus bases de datos.
  • Documenta tus usuarios: Lleva un registro de qué usuario tiene qué permisos y para qué sirve.

[INFO] Si usas Syspanel (puerto 2106), puedes gestionar usuarios MySQL desde la sección "Base de Datos" del panel. Sin embargo, para tareas avanzadas como las que vimos aquí, la terminal es más flexible.


Preguntas frecuentes (FAQ)

1. ¿Cómo creo un usuario que pueda conectarse desde cualquier IP?

Usa '%' como host:

CREATE USER 'remoto'@'%' IDENTIFIED BY 'ClaveRemota';

Pero ten mucho cuidado con la seguridad. Mejor especifica una IP.

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

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

ALTER USER 'usuario'@'localhost' IDENTIFIED BY 'NuevaClave';

3. ¿Puedo dar permisos solo para ciertas tablas?

Sí, en lugar de midb.* usa midb.tabla_especifica:

GRANT SELECT ON midb.productos TO 'consulta'@'localhost';

4. ¿Cómo veo todos los usuarios de MySQL?

Ejecuta:

SELECT User, Host FROM mysql.user;

5. ¿Qué diferencia hay entre GRANT y CREATE USER?

  • CREATE USER solo crea el usuario (puede conectarse pero no tiene permisos).
  • GRANT asigna permisos. También puede crear el usuario automáticamente si no existe (aunque en versiones modernas se recomienda crear primero).

Conclusión

Ahora ya sabes cómo crear usuario MySQL y asignar privilegios MySQL de forma segura y ordenada. Recuerda que la clave está en dar solo los permisos necesarios a cada usuario. Así proteges tus datos y evitas problemas.

Si tienes dudas, no dudes en consultar la documentación oficial o preguntar a tu equipo de soporte. Y si usas Syspanel, recuerda que el puerto es el 2106 para acceder al panel.

¡Espero que este artículo te haya sido útil! Ahora puedes gestionar tus bases de datos con confianza.

¿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