Guía de gestión de contraseñas MySQL: cómo establecer, cambiar, restablecer y asegurar contraseñas (Windows, Linux, Mac)

目次

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

  1. Vuelva a comprobar la contraseña que ingresó
  2. Especifique el nombre de usuario y host correctos
    SELECT User, Host FROM mysql.user;
    
  1. Restablezca la contraseña (vea la sección de restablecimiento de contraseña)
  2. 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

  1. Verifique la lista de usuarios actual
    SELECT User, Host FROM mysql.user;
    
  1. Recree el usuario
    CREATE USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
    
  1. Especifique el host correcto (use localhost o % 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

  1. Detener MySQL
    sudo systemctl stop mysql
    
  1. Iniciar MySQL en modo skip-grant-tables
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    
  1. Iniciar sesión en MySQL
    mysql -u root
    
  1. Establecer una nueva contraseña
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
    
  1. Reiniciar MySQL
    sudo systemctl restart mysql
    

P2: ¿Qué debo hacer si veo “ERROR 1045 (28000): Access denied for user”?

Solución

  1. Verifique la contraseña que ingresó
    mysql -u root -p
    
  1. Confirme que el usuario exista
    SELECT User, Host FROM mysql.user;
    
  1. Restablecer la contraseña (ver instrucciones anteriores)
  2. 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

  1. 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;
    
  1. 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

  1. 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
  1. 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 ItemStatus
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

  1. 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;
    
  1. Elimine cuentas innecesarias
    DELETE FROM mysql.user WHERE User='';
    DROP DATABASE test;
    FLUSH PRIVILEGES;
    
  1. Restrinja el acceso remoto para el usuario root
    UPDATE mysql.user SET Host='localhost' WHERE User='root';
    FLUSH PRIVILEGES;
    
  1. Configure la expiración regular de contraseñas
    SET GLOBAL default_password_lifetime = 90;
    
  1. 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! 💪