Crear un usuario de MySQL con acceso restringido a una IP y permisos totales sobre un esquema
![]()
Cuando administramos un servidor MySQL, es habitual que necesitemos crear usuarios con acceso limitado a determinadas bases de datos y, además, restringir desde qué equipos pueden conectarse.
Una configuración especialmente útil en entornos de red local es crear un usuario que tenga todos los permisos sobre un esquema concreto, pero que solo pueda conectarse desde una dirección IP determinada.
En este ejemplo utilizaremos la dirección IP 172.16.1.52.
1. Crear el esquema
El primer paso es crear la base de datos o esquema sobre el que trabajará el usuario.
Por ejemplo:
CREATE DATABASE mi_schema;Esto crea un esquema denominado mi_schema.
Si el esquema ya existe, este paso no es necesario.
2. Crear el usuario restringido por IP
Una de las características importantes del sistema de usuarios de MySQL es que el usuario se puede asociar a un determinado origen de conexión.
Para crear un usuario que únicamente pueda conectarse desde 172.16.1.52, utilizaremos:
CREATE USER 'mi_usuario'@'172.16.1.52'
IDENTIFIED BY 'TU_PASSWORD';La parte:
'mi_usuario'@'172.16.1.52'es especialmente importante.
En MySQL, una cuenta está formada por:
'usuario'@'host'Por tanto:
'mi_usuario'@'172.16.1.52'significa que mi_usuario solo puede autenticarse cuando la conexión procede de 172.16.1.52.
No es lo mismo que crear:
'mi_usuario'@'%'ya que % permitiría conexiones desde cualquier dirección que cumpla el resto de requisitos de autenticación.
3. Conceder todos los permisos sobre el esquema
Una vez creado el usuario, podemos concederle todos los privilegios sobre mi_schema:
GRANT ALL PRIVILEGES ON mi_schema.*
TO 'mi_usuario'@'172.16.1.52';El * después del nombre del esquema indica que los permisos se aplican a todos los objetos de esa base de datos.
Por ejemplo:
mi_schema.*incluye las tablas y demás objetos incluidos en ese esquema.
El usuario tendrá permisos para realizar las operaciones necesarias sobre ese esquema, pero estos permisos no se extienden automáticamente al resto de bases de datos del servidor.
4. Aplicar los cambios
En las versiones actuales de MySQL, los cambios realizados mediante CREATE USER y GRANT se gestionan directamente por el servidor, por lo que normalmente no es necesario ejecutar FLUSH PRIVILEGES.
Si aun así queremos hacerlo explícitamente, podemos ejecutar:
FLUSH PRIVILEGES;5. Comprobar los permisos
Es recomendable verificar que la configuración se ha realizado correctamente.
Podemos consultar los privilegios del usuario mediante:
SHOW GRANTS FOR 'mi_usuario'@'172.16.1.52';El resultado debería mostrar una concesión similar a:
GRANT ALL PRIVILEGES ON `mi_schema`.* TO `mi_usuario`@`172.16.1.52`Esto confirma que el usuario dispone de todos los privilegios sobre mi_schema.
6. Resultado de la configuración
Con esta configuración tendremos:
| Elemento | Configuración |
|---|---|
| Esquema | mi_schema |
| Usuario | mi_usuario |
| IP permitida | 172.16.1.52 |
| Permisos | Todos sobre mi_schema |
| Acceso a otros esquemas | No concedido |
Por ejemplo, una conexión desde:
172.16.1.52podrá utilizar el usuario:
mi_usuariomientras que una conexión procedente de:
172.16.1.53no podrá utilizar esa misma cuenta.
7. Script completo
Si necesitamos realizar toda la configuración desde cero, podemos utilizar el siguiente script:
CREATE DATABASE mi_schema;
CREATE USER 'mi_usuario'@'172.16.1.52'
IDENTIFIED BY 'TU_PASSWORD';
GRANT ALL PRIVILEGES ON mi_schema.*
TO 'mi_usuario'@'172.16.1.52';
FLUSH PRIVILEGES;Y para comprobar posteriormente los permisos:
SHOW GRANTS FOR 'mi_usuario'@'172.16.1.52';8. Una consideración importante
La restricción:
'mi_usuario'@'172.16.1.52'controla desde qué host puede autenticarse el usuario en MySQL, pero no sustituye a las medidas de seguridad de red.
Si MySQL está escuchando conexiones remotas, también conviene revisar el firewall del servidor y permitir el puerto de MySQL —habitualmente 3306— únicamente desde las redes o equipos que realmente necesiten acceder.
Además, si el servidor está expuesto a otras redes, es recomendable evitar accesos innecesarios y utilizar contraseñas robustas.
Conclusión
La combinación de un usuario asociado a una dirección IP concreta y permisos limitados a un único esquema permite crear una configuración con un nivel de control mucho mayor que utilizar una cuenta con acceso global.
La clave está en combinar:
'mi_usuario'@'172.16.1.52'para restringir el origen de la conexión, con:
GRANT ALL PRIVILEGES ON mi_schema.*para limitar el alcance de los permisos al esquema que necesita utilizar el usuario.
De esta forma, el usuario puede trabajar con todos los objetos de mi_schema, pero no dispone de permisos sobre las demás bases de datos del servidor y tampoco puede utilizar esa cuenta desde una dirección IP diferente a 172.16.1.52.
