- 1 1. Introducción
- 2 2. Cómo crear y cambiar contraseñas en MySQL
- 3 3. Cómo restablecer una contraseña de MySQL si la olvidas
- 4 4. Solución de problemas comunes al cambiar contraseñas MySQL
- 5 5. Endurecimiento de la seguridad de MySQL y configuraciones recomendadas
- 6 6. Preguntas frecuentes (FAQ)
- 6.1 P1: ¿Cuál es la forma más fácil de recuperar una contraseña root de MySQL olvidada?
- 6.2 P2: ¿Qué debo hacer si veo “ERROR 1045 (28000): Access denied for user”?
- 6.3 P3: ¿Existe alguna diferencia entre MySQL 5.6 y 8.0 al cambiar contraseñas?
- 6.4 Q4: ¿Cómo puedo reforzar la política de contraseñas de MySQL?
- 6.5 Q5: ¿Es seguro desactivar el usuario root de MySQL?
- 6.6 Q6: ¿Existen herramientas para gestionar contraseñas de MySQL de forma segura?
- 6.7 Q7: ¿Puedo registrar los cambios de contraseña de MySQL?
- 7 7. Conclusión
1. Introducción
La importancia de la gestión de contraseñas en MySQL
MySQL es un sistema de gestión de bases de datos ampliamente usado en todo el mundo. Sin embargo, la base de su seguridad reside en la configuración y administración adecuada de contraseñas. Sin una gestión apropiada de contraseñas, podrías enfrentar los siguientes riesgos:
- Acceso no autorizado : Las contraseñas débiles hacen que tu sistema sea vulnerable a ataques externos.
- Filtración de datos : Información sensible puede ser expuesta por usuarios malintencionados.
- Manipulación del sistema : La eliminación o modificación de datos puede afectar el funcionamiento normal de sitios web y aplicaciones.
Para evitar estos riesgos, es esencial establecer contraseñas fuertes y cambiarlas regularmente. En este artículo explicaremos en detalle los siguientes aspectos de la gestión de contraseñas en MySQL:
✅ Cómo establecer contraseñas para usuarios nuevos
✅ Cómo cambiar contraseñas de usuarios existentes
✅ Cómo restablecer una contraseña olvidada
✅ Cómo comprobar la fortaleza de una contraseña
✅ Errores comunes y cómo resolverlos
✅ Configuraciones recomendadas para mejorar la seguridad
Al leer este artículo, adquirirás los conocimientos y habilidades necesarios para gestionar correctamente las contraseñas de MySQL, así que asegúrate de leer hasta el final.
2. Cómo crear y cambiar contraseñas en MySQL
Crear un usuario nuevo y establecer una contraseña
Esta sección explica cómo crear un usuario nuevo y establecer una contraseña en MySQL.
1. Iniciar sesión en MySQL
Primero, inicia sesión como administrador de MySQL (por ejemplo, el usuario root).
mysql -u root -p
-u root es una opción para iniciar sesión como usuario root, y -p muestra un prompt de contraseña.
2. Crear un usuario nuevo y establecer una contraseña
Utiliza el comando CREATE USER para crear un usuario nuevo y asignarle una contraseña.
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'secure_password';
'newuser'@'localhost': Especifica el nombre de usuario (newuser) y el host (localhost) desde el cual el usuario puede conectarse.'secure_password': La contraseña a establecer (asegúrate de usar una contraseña fuerte).
3. Conceder los privilegios apropiados
Debes conceder privilegios de base de datos al usuario nuevo. Por ejemplo, para conceder todos los privilegios:
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITH GRANT OPTION;
ALL PRIVILEGES: Concede todos los privilegios.*.*: Permite el acceso a todas las bases de datos y tablas.WITH GRANT OPTION: Permite al usuario conceder privilegios a otros usuarios.
4. Aplicar los privilegios
Ejecuta FLUSH PRIVILEGES para aplicar los cambios.
FLUSH PRIVILEGES;
Ahora has creado exitosamente un usuario nuevo con una contraseña segura y los privilegios apropiados.
Cambiar la contraseña de un usuario existente
Esta sección explica cómo cambiar la contraseña de un usuario existente de MySQL.
1. Iniciar sesión en MySQL
Inicia sesión con privilegios administrativos.
mysql -u root -p
2. Cambiar la contraseña usando ALTER USER (MySQL 5.7 y posteriores)
ALTER USER 'existinguser'@'localhost' IDENTIFIED BY 'new_secure_password';
'existinguser'@'localhost': El nombre de usuario y host a modificar.'new_secure_password': La nueva contraseña.
3. Cambiar la contraseña usando SET PASSWORD (MySQL 5.6 y anteriores)
SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('new_secure_password');
El uso de la función PASSWORD() garantiza que la contraseña se encripte correctamente antes de almacenarse.
4. Aplicar los cambios
No olvides ejecutar FLUSH PRIVILEGES;.
FLUSH PRIVILEGES;
Ahora puedes cambiar de forma segura la contraseña de un usuario existente mediante este método.

3. Cómo restablecer una contraseña de MySQL si la olvidas
Incluso si olvidas tu contraseña de MySQL, puedes restablecerla siguiendo el procedimiento correcto. Esta sección explica cómo restablecer contraseñas en Windows, Linux y Mac.
Cómo restablecer una contraseña de MySQL en Windows
En Windows, un enfoque común para restablecer la contraseña root de MySQL es usar la opción skip-grant-tables.
1. Detener el servicio MySQL
Primero, detenga el servicio MySQL en ejecución en Windows.
net stop mysql
Alternativamente, puede abrir services.msc y detener manualmente el servicio MySQL.
2. Iniciar MySQL usando mysqld --skip-grant-tables
mysqld --skip-grant-tables --skip-networking
3. Iniciar sesión en MySQL
mysql -u root
4. Establecer una nueva contraseña
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
O, para MySQL 5.6 y versiones anteriores, use SET PASSWORD.
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');
5. Reiniciar MySQL
net stop mysql
net start mysql
Cómo restablecer una contraseña MySQL en Linux / Mac
1. Detener el servicio MySQL
sudo systemctl stop mysql
2. Iniciar MySQL en modo --skip-grant-tables
sudo mysqld_safe --skip-grant-tables --skip-networking &
3. Iniciar sesión en MySQL
mysql -u root
4. Restablecer la contraseña
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
5. Reiniciar MySQL
sudo systemctl start mysql
Cambios en los métodos de restablecimiento de contraseña en MySQL 8.0 y posteriores
En MySQL 8.0, el mecanismo de gestión de contraseñas ha cambiado, por lo que debe tener en cuenta el siguiente punto.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';
Esto le permite seguir usando el método de autenticación de contraseñas heredado cuando sea necesario.
4. Solución de problemas comunes al cambiar contraseñas MySQL
Puede encontrarse con errores al intentar cambiar contraseñas MySQL. Esta sección explica las causas y soluciones de los errores más comunes.
ERROR 1045 (28000): Acceso denegado para el usuario
Causa del error
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Este error ocurre al iniciar sesión en MySQL si la contraseña es incorrecta o los privilegios son insuficientes.
Solución
- Vuelva a comprobar la contraseña que ingresó
- Especifique el nombre de usuario y host correctos
SELECT User, Host FROM mysql.user;
- Restablezca la contraseña (vea la sección de restablecimiento de contraseña)
- Configure los privilegios correctamente
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
ERROR 1133: No se puede encontrar ninguna fila coincidente en la tabla de usuarios
Causa del error
ERROR 1133: Can't find any matching row in the user table
Este error ocurre cuando el usuario especificado no existe.
Solución
- Verifique la lista de usuarios actual
SELECT User, Host FROM mysql.user;
- Recree el usuario
CREATE USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
- Especifique el host correcto (use
localhosto%de forma adecuada)
ERROR 1820: Debe restablecer su contraseña
Causa del error
ERROR 1820: You must reset your password using ALTER USER statement before executing this statement.
Este error ocurre cuando la contraseña ha expirado.
Solución
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
Para desactivar la expiración de contraseñas:
SET GLOBAL default_password_lifetime = 0;
ERROR 2059: No se pudo cargar el plugin caching_sha2_password
Causa del error
ERROR 2059: Plugin caching_sha2_password could not be loaded
En MySQL 8.0 y posteriores, el plugin de autenticación predeterminado cambió a caching_sha2_password, lo que puede generar errores con algunos clientes.
Solución
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';
O agregue lo siguiente al archivo de configuración de MySQL (my.cnf o my.ini) y reinicie MySQL.
[mysqld]
default_authentication_plugin=mysql_native_password
Reiniciar MySQL:
sudo systemctl restart mysql
5. Endurecimiento de la seguridad de MySQL y configuraciones recomendadas
Fortalecer la seguridad de MySQL es esencial para mejorar la seguridad de la base de datos y evitar accesos no autorizados y violaciones de datos. Esta sección presenta configuraciones recomendadas para mejorar la seguridad de MySQL.
Establecer contraseñas seguras
Usar contraseñas débiles en MySQL convierte su sistema en un objetivo fácil para los atacantes. Configure los ajustes para aumentar la fortaleza de las contraseñas.
Habilitar una política de contraseñas
Verifique la política de contraseñas actual:
SHOW VARIABLES LIKE 'validate_password%';
Configure una política de contraseñas fuerte:
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
Establecer expiración de contraseñas
Cambiar las contraseñas regularmente mejora la seguridad.
Verifique la configuración actual de expiración de contraseñas:
SHOW VARIABLES LIKE 'default_password_lifetime';
Establezca la expiración de la contraseña a 90 días:
SET GLOBAL default_password_lifetime = 90;
Reforzar la seguridad del usuario root
Restringir el acceso remoto para el usuario root
Verifique la configuración actual de host para el usuario root:
SELECT User, Host FROM mysql.user WHERE User = 'root';
Deshabilite el acceso remoto para root:
UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;
Crear una cuenta de administrador alternativa y deshabilitar root
CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
RENAME USER 'root'@'localhost' TO 'disabled_root'@'localhost';
FLUSH PRIVILEGES;
Restringir conexiones remotas de MySQL
Edite el archivo de configuración (my.cnf o my.ini):
[mysqld]
bind-address = 127.0.0.1
Configure el firewall en Linux:
sudo ufw deny 3306
Permita solo una dirección IP específica:
sudo ufw allow from 192.168.1.100 to any port 3306
Eliminar cuentas y privilegios innecesarios
Verifique la lista actual de usuarios:
SELECT User, Host FROM mysql.user;
Elimine usuarios anónimos:
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;
Elimine la base de datos de prueba innecesaria:
DROP DATABASE test;
FLUSH PRIVILEGES;
Habilitar registro (logging) de MySQL
Habilite el registro de errores:
[mysqld]
log_error = /var/log/mysql/error.log
Habilite el registro general de consultas:
general_log = 1
general_log_file = /var/log/mysql/general.log
Reiniciar MySQL:
sudo systemctl restart mysql
6. Preguntas frecuentes (FAQ)
Esta sección resume preguntas comunes y sus soluciones relacionadas con la configuración, modificación y restablecimiento de contraseñas de MySQL.
P1: ¿Cuál es la forma más fácil de recuperar una contraseña root de MySQL olvidada?
Solución
- Detener MySQL
sudo systemctl stop mysql
- Iniciar MySQL en modo
skip-grant-tablessudo mysqld_safe --skip-grant-tables --skip-networking &
- Iniciar sesión en MySQL
mysql -u root
- Establecer una nueva contraseña
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
- Reiniciar MySQL
sudo systemctl restart mysql
P2: ¿Qué debo hacer si veo “ERROR 1045 (28000): Access denied for user”?
Solución
- Verifique la contraseña que ingresó
mysql -u root -p
- Confirme que el usuario exista
SELECT User, Host FROM mysql.user;
- Restablecer la contraseña (ver instrucciones anteriores)
- Conceder los privilegios apropiados
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
P3: ¿Existe alguna diferencia entre MySQL 5.6 y 8.0 al cambiar contraseñas?
Cambiar la contraseña en MySQL 5.6 y versiones anteriores
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');
Cambiar la contraseña en MySQL 8.0 y versiones posteriores
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
En MySQL 8.0, dado que caching_sha2_password es el método de autenticación predeterminado, los clientes más antiguos pueden requerir el siguiente ajuste:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';
Q4: ¿Cómo puedo reforzar la política de contraseñas de MySQL?
Configurar una política de contraseñas robusta
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
Q5: ¿Es seguro desactivar el usuario root de MySQL?
Solución
- Crear una cuenta de administrador
CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'secure_password'; GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
- Desactivar la cuenta root
RENAME USER 'root'@'localhost' TO 'disabled_root'@'localhost'; FLUSH PRIVILEGES;
Q6: ¿Existen herramientas para gestionar contraseñas de MySQL de forma segura?
Solución
mysql_config_editor(Herramienta oficial de MySQL)mysql_config_editor set --login-path=local --host=localhost --user=root --password
Esto le permite iniciar sesión sin escribir explícitamente la contraseña.
mysql --login-path=local
- Gestores de contraseñas (Bitwarden, 1Password, KeePass, etc.)
- Útil para generar y almacenar de forma segura contraseñas robustas.
Q7: ¿Puedo registrar los cambios de contraseña de MySQL?
Solución
Activar el registro general de consultas
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log
Reiniciar MySQL:
sudo systemctl restart mysql
7. Conclusión
Este artículo explicó todo, desde los conceptos básicos hasta técnicas avanzadas, de la gestión de contraseñas en MySQL. A continuación se muestra un resumen de los puntos clave junto con una lista de verificación para gestionar adecuadamente las contraseñas de MySQL.
Puntos clave de la gestión de contraseñas de MySQL
✅ Una configuración y gestión adecuada de contraseñas es la base de la seguridad
✅ Establezca contraseñas robustas al crear nuevos usuarios
✅ Cambie las contraseñas regularmente y configure políticas de expiración
✅ Comprenda los procedimientos de recuperación para contraseñas olvidadas
✅ Solucione correctamente los errores durante los cambios de contraseña
✅ Optimice el acceso remoto y la gestión del usuario root para reforzar la seguridad
✅ Active el registro para rastrear actividades relacionadas con contraseñas
Lista de verificación de gestión de contraseñas de MySQL
| Checklist Item | Status |
|---|---|
| Have you set a strong root password for MySQL? | ✅ / ❌ |
Do you use the CREATE USER command when creating new users? | ✅ / ❌ |
Have you enabled the validate_password plugin and configured a strong password policy? | ✅ / ❌ |
| Do you regularly change passwords and set expiration policies? | ✅ / ❌ |
Have you disabled remote access for the root user? | ✅ / ❌ |
| Have you removed unnecessary or anonymous accounts? | ✅ / ❌ |
Do you understand how to reset passwords using skip-grant-tables mode? | ✅ / ❌ |
Do you understand how to resolve ERROR 1045 and ERROR 1820 during password changes? | ✅ / ❌ |
Have you enabled MySQL logs (general_log and error_log)? | ✅ / ❌ |
Acciones recomendadas después de leer este artículo
- Revise su política de contraseñas actual y fortalézcala si es necesario
SHOW VARIABLES LIKE 'validate_password%'; SET GLOBAL validate_password.policy = STRONG; SET GLOBAL validate_password.length = 12;
- Elimine cuentas innecesarias
DELETE FROM mysql.user WHERE User=''; DROP DATABASE test; FLUSH PRIVILEGES;
- Restrinja el acceso remoto para el usuario root
UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;
- Configure la expiración regular de contraseñas
SET GLOBAL default_password_lifetime = 90;
- Active el registro para monitoreo
[mysqld] log_error = /var/log/mysql/error.log general_log = 1 general_log_file = /var/log/mysql/general.log
Reiniciar MySQL:
sudo systemctl restart mysql
Artículos relacionados para seguir aprendiendo
📌 Guía detallada de la gestión de privilegios de usuarios en MySQL
📌 Procedimientos de copia de seguridad y restauración en MySQL
📌 Cómo optimizar bases de datos MySQL
📌 Configurar MySQL con autenticación externa (LDAP u OAuth)
Reflexiones finales
La gestión de contraseñas de MySQL es conocimiento esencial para proteger la seguridad de la base de datos.
¡Aplica las prácticas cubiertas en esta guía y garantiza una gestión segura de la base de datos! 💪


