Desbloquear cuenta
Después de bloquear una cuenta de usuario, llega el momento en que necesitas restaurar el acceso. Quizás la investigación de seguridad concluyó sin hallazgos, un contratista regresa para un nuevo proyecto o un empleado vuelve de una licencia prolongada. La sentencia ALTER USER ... ACCOUNT UNLOCK reactiva la cuenta de forma inmediata, permitiendo que el usuario se conecte nuevamente con su contraseña y privilegios originales.
El proceso de desbloqueo es rápido y sencillo, pero requiere verificar que las condiciones son apropiadas para restaurar el acceso, especialmente si la cuenta fue bloqueada por razones de seguridad.
Sintaxis
La sintaxis para desbloquear una cuenta es:
ALTER USER 'usuario'@'host' ACCOUNT UNLOCK;Comportamiento básico
Al ejecutar ACCOUNT UNLOCK, MySQL cambia el campo account_locked de Y a N en la tabla mysql.user. A partir de ese instante, el usuario puede conectarse nuevamente usando sus credenciales existentes.
ALTER USER 'contratista'@'%' ACCOUNT UNLOCK;Para verificar que el desbloqueo fue exitoso:
SELECT user, host, account_locked
FROM mysql.user
WHERE user = 'contratista';| user | host | account_locked |
|---|---|---|
| contratista | % | N |
El valor N en la columna account_locked confirma que la cuenta está activa y lista para recibir conexiones.
Es importante entender que el desbloqueo restaura la capacidad de conexión, pero no modifica los privilegios del usuario. Si antes del bloqueo se revocaron algunos privilegios, esos cambios persisten. El desbloqueo solamente afecta al estado de la cuenta, no a sus permisos.
Caso práctico: reactivación después de una investigación
Cuando una cuenta fue bloqueada durante una investigación de seguridad, el proceso de reactivación debe seguir pasos ordenados para garantizar que el acceso se restaura de forma segura.
Primero, confirma el estado actual de la cuenta y revisa sus privilegios:
SELECT user, host, account_locked, password_expired, password_last_changed
FROM mysql.user
WHERE user = 'empleado_investigado';| user | host | account_locked | password_expired | password_last_changed |
|---|---|---|---|---|
| empleado_investigado | localhost | Y | N | 2024-06-15 10:30:00 |
Si la contraseña es antigua o si por política de seguridad quieres forzar un cambio de contraseña al reactivar la cuenta, puedes combinar el desbloqueo con la expiración de contraseña:
ALTER USER 'empleado_investigado'@'localhost'
ACCOUNT UNLOCK
PASSWORD EXPIRE;De esta forma, el usuario podrá conectarse pero MySQL le exigirá que establezca una nueva contraseña antes de poder ejecutar cualquier otra sentencia. Esto es una buena práctica cuando no puedes garantizar que las credenciales no fueron comprometidas durante el incidente.
Si la investigación concluyó satisfactoriamente y no hay necesidad de cambiar la contraseña:
ALTER USER 'empleado_investigado'@'localhost' ACCOUNT UNLOCK;Verifica los privilegios para asegurarte de que son los apropiados para la función actual del empleado:
SHOW GRANTS FOR 'empleado_investigado'@'localhost';| Grants for empleado_investigado@localhost |
|---|
GRANT USAGE ON . TO empleado_investigado@localhost |
GRANT SELECT, INSERT, UPDATE ON proyecto.* TO empleado_investigado@localhost |
Caso práctico: desbloqueo de cuentas bloqueadas automáticamente
Cuando una cuenta se bloquea automáticamente por exceder el número de intentos fallidos de inicio de sesión, puedes desbloquearla manualmente sin esperar a que expire el tiempo de bloqueo.
Identifica las cuentas que fueron bloqueadas automáticamente:
SELECT user, host, account_locked
FROM mysql.user
WHERE account_locked = 'Y'
AND user NOT LIKE 'mysql.%'
ORDER BY user;| user | host | account_locked |
|---|---|---|
| api_cliente | 10.0.1.% | Y |
| vendedor_norte | 192.168.1.% | Y |
Si determinas que el bloqueo fue causado por un error legítimo, como una aplicación mal configurada que estaba enviando credenciales incorrectas, procede a desbloquear:
ALTER USER 'api_cliente'@'10.0.1.%' ACCOUNT UNLOCK;Para evitar que el problema se repita inmediatamente, asegúrate de que la aplicación o el usuario tenga las credenciales correctas antes de desbloquear la cuenta. Si desbloqueas la cuenta y los intentos fallidos continúan, volverá a bloquearse automáticamente.
También puedes ajustar la política de bloqueo automático si resulta demasiado restrictiva:
ALTER USER 'api_cliente'@'10.0.1.%'
ACCOUNT UNLOCK
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LOCK_TIME 1;Esta sentencia desbloquea la cuenta y al mismo tiempo aumenta el umbral a diez intentos fallidos antes del bloqueo, con un tiempo de bloqueo de un día.
Caso práctico: monitoreo y reactivación masiva
En ocasiones puedes necesitar revisar y desbloquear múltiples cuentas a la vez. Esto es frecuente después de un mantenimiento del servidor o una migración que pudo haber bloqueado cuentas accidentalmente.
Primero, obtén un panorama completo de las cuentas bloqueadas:
SELECT user, host, account_locked, password_expired
FROM mysql.user
WHERE account_locked = 'Y'
AND user NOT LIKE 'mysql.%'
ORDER BY user;| user | host | account_locked | password_expired |
|---|---|---|---|
| app_inventario | 10.0.1.% | Y | N |
| contratista_prev | % | Y | N |
| dev_temporal | localhost | Y | Y |
| soporte_externo | 192.168.5.% | Y | N |
Después de revisar cada caso, desbloquea las cuentas que correspondan:
ALTER USER 'app_inventario'@'10.0.1.%' ACCOUNT UNLOCK;
ALTER USER 'soporte_externo'@'192.168.5.%' ACCOUNT UNLOCK;Las cuentas contratista_prev y dev_temporal podrían permanecer bloqueadas si aún no es momento de reactivarlas.
Para confirmar que solo las cuentas deseadas fueron desbloqueadas:
SELECT user, host, account_locked
FROM mysql.user
WHERE user IN ('app_inventario', 'contratista_prev', 'dev_temporal', 'soporte_externo');| user | host | account_locked |
|---|---|---|
| app_inventario | 10.0.1.% | N |
| contratista_prev | % | Y |
| dev_temporal | localhost | Y |
| soporte_externo | 192.168.5.% | N |
Las cuentas de la aplicación de inventario y soporte externo están desbloqueadas, mientras que las otras dos permanecen bloqueadas según lo planeado.
Advertencia: Antes de desbloquear una cuenta que fue bloqueada por razones de seguridad, asegúrate de que la causa del bloqueo ha sido resuelta. Desbloquear prematuramente una cuenta comprometida puede exponer el servidor a accesos no autorizados.
Consejo: Implementa un procedimiento estándar para las solicitudes de desbloqueo en tu organización. Este procedimiento debería incluir la verificación de la identidad del solicitante, la aprobación de un supervisor y el registro de la acción en un log de auditoría. MySQL Enterprise Edition ofrece un plugin de auditoría que registra automáticamente estos cambios.
En la siguiente sección veremos los motores de almacenamiento de MySQL, que determinan cómo se almacenan y gestionan los datos físicamente en el servidor.
Escrito por Eduardo Lázaro
