Aloje su propio agente de IA con OpenClaw: instalación gratuita en un solo clic!

Guía completa para crear usuarios y otorgar privilegios en MySQL

Guía completa para crear usuarios y otorgar privilegios en MySQL

Ejecutar toda tu instancia de MySQL bajo la cuenta root es el equivalente, en bases de datos, a dejar la puerta principal de tu servidor abierta. Aquí tienes cómo crear usuarios con los privilegios adecuados y nada más.

Requisitos previos: Acceso y configuración de MySQL

Necesitas una instalación de MySQL existente y la capacidad de iniciar sesión como root o como un usuario con privilegios GRANT OPTION:

mysql -u root -p

Introduce tu contraseña de root cuando se te pida. Desde aquí puedes crear usuarios, asignar privilegios y gestionar toda la capa de control de acceso.

Cómo crear un usuario de MySQL

Sintaxis de la declaración CREATE USER

La sintaxis completa para crear un usuario de MySQL:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

La parte del hosting controla desde dónde pueden originarse las conexiones. localhost restringe las conexiones únicamente al entorno local. % permite conexiones desde cualquier hosting. También puedes especificar una dirección IP o una subred.

Crear un usuario con contraseña

Crea un usuario local llamado appuser:

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';

En MySQL 8.0+, el plugin de autenticación predeterminado es caching_sha2_password. Los clientes más antiguos pueden necesitar mysql_native_password en su lugar:

CREATE USER 'appuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPassword123!';

Creando un usuario para acceso remoto

Permite conexiones desde cualquier hosting utilizando % como valor del host:

CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'RemotePassword456!';

Para un control más estricto, restringe a una IP específica:

CREATE USER 'remoteuser'@'192.168.1.100' IDENTIFIED BY 'RemotePassword456!';

Cómo otorgar privilegios en MySQL

Otorgar todos los privilegios en una base de datos

Otorgar a un usuario acceso total a una base de datos específica:

GRANT ALL PRIVILEGES ON mydatabase.* TO 'appuser'@'localhost';

La sintaxis *.* concede privilegios en todas las bases de datos, algo que solo deberías usar para cuentas administrativas.

Otorgar privilegios específicos

El principio de privilegios mínimos es el enfoque correcto. Un usuario de informes de solo lectura necesita solo SELECT:

GRANT SELECT ON mydatabase.* TO 'readonly_user'@'localhost';

Una aplicación que solo lee y escribe registros:

GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'appuser'@'localhost';

Los privilegios disponibles incluyen: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, EXECUTE y más.

Aplicar cambios de privilegios con FLUSH PRIVILEGES

Después de otorgar privilegios, vacía las tablas de concesiones para asegurar que los cambios surtan efecto de inmediato:

FLUSH PRIVILEGES;

MySQL 8.0 aplica GRANT y REVOKE automáticamente, pero ejecutar FLUSH PRIVILEGES sigue siendo una buena práctica cuando se modifican directamente las tablas del sistema.

Cómo ver los privilegios otorgados

Verifica qué privilegios tiene actualmente un usuario:

SHOW GRANTS FOR 'appuser'@'localhost';

Para el usuario actualmente conectado:

SHOW GRANTS FOR CURRENT_USER();

Cómo revocar y eliminar usuarios de MySQL

Revocar privilegios específicos

Eliminar el acceso de escritura mientras se mantiene el acceso de lectura:

REVOKE INSERT, UPDATE, DELETE ON mydatabase.* FROM 'appuser'@'localhost';

Luego vacía:

FLUSH PRIVILEGES;

Eliminar una cuenta de usuario de MySQL

Eliminar un usuario por completo:

DROP USER 'appuser'@'localhost';

Esto elimina la cuenta de usuario y todos los privilegios asociados. Verifica que el usuario ha desaparecido:

SELECT User, Host FROM mysql.user;

Buenas prácticas de seguridad para usuarios en MySQL

  • Nunca uses la cuenta root para conexiones de aplicaciones. Crea usuarios dedicados por aplicación.
  • Otorgar solo los privilegios que la aplicación realmente necesita. Un CMS necesita SELECT, INSERT, UPDATE, DELETE. No necesita DROP ni ALTER.
  • Usa contraseñas fuertes y únicas. Almacénalas en variables de entorno o un gestor de secretos, no en el código.
  • Restringir el acceso del hosting. Usa localhost o una IP específica en lugar de % siempre que sea posible.
  • Audita tu lista de usuarios periódicamente: SELECT User, Host FROM mysql.user;

Preguntas Frecuentes: Crear usuario MySQL

¿Cómo creo un nuevo usuario en MySQL?

Ejecuta: CREATE USER ‘username’@’localhost’ IDENTIFIED BY ‘password’; y después concede los privilegios adecuados con GRANT … ON database.* TO ‘username’@’localhost’;

¿Cómo otorgo todos los privilegios en MySQL?

Ejecuta: GRANT ALL PRIVILEGES ON base_de_datos.* TO ‘nombreusuario’@’host’; Sigue con FLUSH PRIVILEGES; para aplicar inmediatamente.

¿Cómo veo qué privilegios tiene un usuario de MySQL?

Ejecuta: SHOW GRANTS FOR ‘nombreusuario’@’host’; Esto lista todos los privilegios asignados a ese usuario.

¿Cómo revocar privilegios en MySQL?

Ejecuta: REVOKE tipo_de_privilegio ON base de datos.* FROM ‘nombreusuario’@’host’; Especifica exactamente qué privilegios eliminar. Luego FLUSH PRIVILEGES;

Scroll al inicio