Guía para principiantes: Establecer, cambiar y restablecer contraseñas de MySQL

目次

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 utilizado en todo el mundo, y su clave para la gestión de la seguridad es la configuración y operación adecuadas de las contraseñas. No gestionar correctamente las contraseñas puede exponerlo a los siguientes riesgos.

  • Acceso no autorizado : Establecer contraseñas débiles lo hace más vulnerable a ataques externos.
  • Fuga de datos : Los usuarios malintencionados podrían exponer información confidencial.
  • Manipulación del sistema : Eliminar o alterar datos puede afectar el funcionamiento normal de sitios web o aplicaciones.

Para evitar estos riesgos, es importante establecer contraseñas fuertes y cambiarlas regularmente. Este artículo ofrece una explicación detallada de los siguientes temas relacionados con las contraseñas de MySQL. ✅ Cómo establecer contraseñas para nuevos usuariosCómo cambiar contraseñas de usuarios existentesCómo restablecer una contraseña olvidadaCómo comprobar la fortaleza de una contraseñaErrores comunes y sus solucionesConfiguraciones recomendadas para reforzar la seguridad Al leer este artículo, adquirirá los conocimientos y habilidades necesarios para gestionar las contraseñas de MySQL correctamente, así que lea hasta el final.

2. Cómo Establecer y Cambiar Contraseñas en MySQL

Crear un Nuevo Usuario y Establecer una Contraseña

Esto explica cómo crear un nuevo usuario en MySQL y establecer una contraseña.

1. Iniciar sesión en MySQL

Primero, inicie sesión como administrador de MySQL (por ejemplo, el usuario root).

mysql -u root -p

-u root es la opción para iniciar sesión como el usuario root, y -p es la opción para mostrar un aviso para introducir la contraseña.

2. Crear un Nuevo Usuario y Establecer una Contraseña

Use el comando CREATE USER para crear un nuevo usuario y establecer una contraseña.

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'secure_password';
  • 'newuser'@'localhost' : especifica el nombre de usuario a crear (newuser) y el host desde el que el usuario puede acceder (localhost).
  • 'secure_password' : la contraseña a establecer (elija una con la fortaleza adecuada).

3. Conceder los Privilegios Apropiados

El nuevo usuario necesita que se le concedan privilegios de operación en la base de datos. Por ejemplo, para conceder todos los privilegios, haga lo siguiente.

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 : también permite conceder privilegios a otros usuarios.

4. Aplicar los Privilegios

Ejecute FLUSH PRIVILEGES para aplicar los cambios.

FLUSH PRIVILEGES;

Ahora ha creado un nuevo usuario y establecido una contraseña y privilegios adecuados.

Cambiar la Contraseña de un Usuario Existente

Esto explica cómo cambiar la contraseña de un usuario MySQL existente.

1. Iniciar sesión en MySQL

Primero, inicie 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 cambiar.
  • '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');

Al usar la función PASSWORD(), la contraseña se puede cifrar y almacenar correctamente.

4. Aplicar los Cambios

Asegúrese de ejecutar FLUSH PRIVILEGES;.

FLUSH PRIVILEGES;

Con este método, puede cambiar la contraseña de un usuario existente de forma segura.

3. Cómo Restablecer una Contraseña Olvidada de MySQL

Aunque olvide su contraseña de MySQL, puede restablecerla siguiendo los pasos adecuados. Este artículo explica cómo restablecer la contraseña en entornos Windows, Linux y Mac.

Cómo Restablecer la Contraseña de MySQL en Windows

En Windows, el método común para restablecer la contraseña de root de MySQL es usar la opción skip-grant-tables.

1. Detener el Servicio de MySQL

Primero, detenga el servicio de MySQL que está ejecutándose en Windows.

net stop mysql

Alternativamente, puedes 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';

Alternativamente, para MySQL 5.6 y versiones anteriores, usa SET PASSWORD.

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');

5. Reiniciar MySQL

net stop mysql
net start mysql

Cómo restablecer la contraseña de 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 el método de restablecimiento para MySQL 8.0 y posteriores

En MySQL 8.0, el mecanismo de gestión de contraseñas ha cambiado, y debes tener en cuenta los siguientes puntos.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';

Esto te permite usar el método de autenticación de contraseña tradicional.

4. Resumen del manejo de errores al cambiar contraseñas de MySQL

Cuando intentas cambiar una contraseña de MySQL, pueden ocurrir errores. Este artículo explica las causas y soluciones de estos errores.

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 cuando intentas iniciar sesión en MySQL y la contraseña es incorrecta o los privilegios son insuficientes.

Solución

  1. Verifica nuevamente la contraseña que ingresaste
  2. Especifica el nombre de usuario y el nombre de host correctos
SELECT User, Host FROM mysql.user;
  1. Restablecer la contraseña (consulta la sección de restablecimiento de contraseña para los pasos)
  2. Configurar correctamente los privilegios
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. Verifica la lista actual de usuarios
SELECT User, Host FROM mysql.user;
  1. Recrear el usuario
CREATE USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
  1. Especifica el host apropiado (usa localhost o % según sea necesario)

ERROR 1820: Debes restablecer tu 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 establecer la expiración de la contraseña a ilimitada:

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 método de autenticación predeterminado ha cambiado a caching_sha2_password, lo que puede causar errores con algunos clientes.

Solución

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';

Alternativamente, agrega lo siguiente al archivo de configuración de MySQL (my.cnf o my.ini) y reinicia.

[mysqld]
default_authentication_plugin=mysql_native_password

Reiniciar MySQL:

sudo systemctl restart mysql

5. Fortalecimiento de la seguridad de MySQL y configuraciones recomendadas

Fortalecer la seguridad de MySQL es importante para mejorar la seguridad de la base de datos y prevenir el acceso no autorizado y las filtraciones de datos. Este artículo presenta los ajustes recomendados que debes implementar para mejorar la seguridad de MySQL.

Establecer Contraseñas Fuertes

En MySQL, usar contraseñas simples te convierte en un objetivo fácil para los atacantes. Apliquemos ajustes para mejorar la fortaleza de las contraseñas.

Habilitar la Política de Contraseñas

Verifica la política de contraseñas actual:

SHOW VARIABLES LIKE 'validate_password%';

Establece 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 la Expiración de Contraseñas

Cambiar las contraseñas regularmente puede fortalecer la seguridad.

Verifica la expiración actual de las contraseñas:

SHOW VARIABLES LIKE 'default_password_lifetime';

Establece la expiración de la contraseña a 90 días:

SET GLOBAL default_password_lifetime = 90;

Fortalecer la Seguridad del Usuario root

Restringir el Acceso Remoto para el Usuario root

Verifica el host actual del usuario root:

SELECT User, Host FROM mysql.user WHERE User = 'root';

Desactiva el acceso remoto para el usuario root:

UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;

Crear un Alias para la Cuenta root para Evitar Ataques

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 las Conexiones Remotas de MySQL

Modifica el archivo de configuración (my.cnf o my.ini):

[mysqld]
bind-address = 127.0.0.1

Configura el firewall en Linux:

sudo ufw deny 3306

Permite solo una dirección IP específica:

sudo ufw allow from 192.168.1.100 to any port 3306

Eliminar Cuentas y Privilegios Innecesarios

Verifica la lista actual de usuarios:

SELECT User, Host FROM mysql.user;

Elimina usuarios anónimos:

DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;

Elimina bases de datos de prueba innecesarias:

DROP DATABASE test;
FLUSH PRIVILEGES;

Habilitar los Registros de Monitoreo de MySQL

Habilita el registro de errores:

[mysqld]
log_error = /var/log/mysql/error.log

Habilita el registro de consultas:

general_log = 1
general_log_file = /var/log/mysql/general.log

Reinicia MySQL:

sudo systemctl restart mysql

6. Preguntas Frecuentes (FAQ)

Hemos compilado preguntas comunes y sus soluciones sobre la configuración, cambios y restablecimientos de contraseñas de MySQL.

Q1: ¿Cuál es el método de recuperación más sencillo si olvidas la contraseña root de MySQL?

Solución

  1. Detén MySQL

«` sudo systemctl stop mysql

2. **Inicia MySQL en modo `skip-grant-tables`**

   ```
sudo mysqld_safe --skip-grant-tables --skip-networking &
  1. Inicia sesión en MySQL

«` mysql -u root

4. **Establece una nueva contraseña**

   ```
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
  1. Reinicia MySQL

«` sudo systemctl restart mysql

### Q2: ¿Cómo abordar el mensaje “ERROR 1045 (28000): Acceso denegado para el usuario”?

#### Solución

1. **Verifica que la contraseña ingresada sea correcta**

   ```
mysql -u root -p
  1. Verifica que el usuario haya sido creado correctamente

«` SELECT User, Host FROM mysql.user;

3. **Restablece la contraseña** (ver los pasos anteriores)

4. **Establece los privilegios de manera adecuada**

   ```
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Q3: ¿Existen diferencias en cómo cambiar contraseñas entre MySQL 5.6 y 8.0?

Cambio de contraseña para MySQL 5.6 y versiones anteriores

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');

Cambio de contraseña para MySQL 8.0 y versiones posteriores

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

Además, dado que MySQL 8.0 utiliza caching_sha2_password como método de autenticación predeterminado, deberías cambiar a lo siguiente si necesitas compatibilidad con clientes más antiguos.

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?

Establecer 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;

Q5: ¿Es seguro desactivar el usuario root de MySQL?

Solución

  1. Crear un usuario 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 te permite iniciar sesión sin introducir explícitamente la contraseña.

mysql --login-path=local
  1. Gestores de contraseñas (Bitwarden, 1Password, KeePass, etc.)
  • Conveniente para generar y gestionar contraseñas seguras.

Q7: ¿Se pueden registrar los cambios de contraseña en MySQL?

Solución

Habilitar el registro de consultas generales

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log

Reiniciar MySQL:

sudo systemctl restart mysql

7. Resumen

En este artículo, explicamos conocimientos sobre la gestión de contraseñas de MySQL desde conceptos básicos hasta temas avanzados. Finalmente, organizamos los puntos clave y proporcionamos una lista de verificación para una gestión adecuada de contraseñas de MySQL.

Puntos clave para la gestión de contraseñas de MySQL

El establecimiento y la gestión adecuados de contraseñas son la base de las medidas de seguridad
Establecer contraseñas fuertes al crear nuevos usuarios
Cambiar contraseñas regularmente y establecer fechas de vencimiento
Comprender los procedimientos de recuperación para contraseñas olvidadas
Manejar adecuadamente los errores que ocurren durante los cambios de contraseña
Optimizar conexiones remotas y la gestión del usuario root para reforzar la seguridad
Habilitar el registro para rastrear el historial de cambios de contraseña

Lista de verificación de gestión de contraseñas de MySQL

Elemento de la lista de verificación

Estado

¿Se ha configurado la contraseña de root de MySQL como una contraseña fuerte?

✅ / ❌

¿Usas el comando CREATE USER al crear nuevos usuarios?

✅ / ❌

¿Está habilitado el plugin validate_password y está usando contraseñas fuertes?

✅ / ❌

¿Cambias las contraseñas regularmente y estableces fechas de vencimiento?

✅ / ❌

¿Has deshabilitado el acceso remoto para el usuario root?

✅ / ❌

¿Ha eliminado las cuentas de usuario innecesarias y las cuentas anónimas?

✅ / ❌

¿Entiendes cómo restablecer contraseñas usando el modo skip-grant-tables?

✅ / ❌

¿Sabes cómo manejar errores como ERROR 1045 y ERROR 1820 al cambiar contraseñas?

✅ / ❌

¿Has habilitado los registros de MySQL (por ejemplo, general_log y error_log)?

✅ / ❌

Próximas acciones basadas en este artículo

  1. Revisar la política de contraseñas actual y reforzarla
SHOW VARIABLES LIKE 'validate_password%';
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
  1. Eliminar cuentas innecesarias
DELETE FROM mysql.user WHERE User='';
DROP DATABASE test;
FLUSH PRIVILEGES;
  1. Restringir el acceso remoto para el usuario root
UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;
  1. Configurar cambios regulares de contraseña
SET GLOBAL default_password_lifetime = 90;
  1. Habilitar el registro y la supervisión
[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 profundizar

📌 Detalles sobre la gestión de privilegios de usuarios de MySQL
📌 Procedimientos de respaldo y restauración de MySQL
📌 Métodos para la optimización de bases de datos MySQL
📌 Configuración de MySQL con autenticación externa (LDAP y OAuth)

Conclusión

La gestión de contraseñas de MySQL es conocimiento esencial para proteger la seguridad de la base de datos.
¡Ponga en práctica el contenido de este artículo y asegure una gestión segura de los datos! 💪