Error ‘Acceso denegado para el usuario’ de MySQL: causas y soluciones

目次

1. Introducción

El error «mysql access denied for user» es un problema común que los usuarios de MySQL encuentran con frecuencia. Este error significa que la conexión a la base de datos fue denegada y requiere una configuración adecuada de ajustes y permisos.

Lo que aprenderás de este artículo

  • Comprenderás la causa del error y podrás implementar soluciones adecuadas.
  • Aprenderás a manejar de manera eficiente la configuración de MySQL y la gestión de usuarios con pasos amigables para principiantes.

Audiencia prevista

  • Principiantes que recién han comenzado a usar MySQL
  • Usuarios intermedios que tienen dificultades con la resolución de errores
  • Técnicos que desean comprender la causa raíz del problema

Este artículo ofrece una explicación completa que cubre los detalles del error, causas, soluciones y medidas preventivas.

2. Qué significa el error “Access denied for user”

Significado del mensaje de error

En MySQL, el error “Access denied for user” ocurre cuando la autenticación falla. El formato típico de este error es el siguiente:

ERROR 1045 (28000): Access denied for user 'username'@'hostname' (using password: YES)

Partes clave del error

  • 'username' : el nombre de usuario de MySQL en cuestión
  • 'hostname' : el nombre del host que intentó la conexión (por ejemplo, localhost, dirección IP)
  • (using password: YES) : se muestra cuando se está utilizando autenticación por contraseña

Este error ocurre debido a problemas relacionados con la autenticación de usuarios o privilegios.

Situaciones comunes en las que ocurre el error

Este error suele ocurrir en casos como los siguientes:

  1. Inmediatamente después de crear un nuevo usuario Ocurre cuando los privilegios no se establecen correctamente.
  2. La información de conexión de la aplicación es incorrecta Especialmente cuando se usan credenciales obsoletas almacenadas.
  3. Se configuran restricciones de host Se niegan las conexiones desde hosts no permitidos.

Notas adicionales para principiantes

Un “host” se refiere al dispositivo o servidor que intenta conectarse a MySQL. Por ejemplo, localhost se refiere a la computadora en la que estás trabajando actualmente.

3. Causas principales

Nombre de usuario o contraseña incorrectos

El motivo más común es un nombre de usuario o contraseña incorrectos.

Errores comunes

  • El archivo de configuración contiene credenciales incorrectas.
  • La aplicación está usando credenciales obsoletas.

Cómo verificar

Utiliza el siguiente comando para comprobar que puedes iniciar sesión con el nombre de usuario y la contraseña correctos.

mysql -u username -p

Cuando se te solicite la contraseña, introdúcela correctamente. Si es incorrecta, el inicio de sesión fallará.

Privilegios insuficientes del usuario

En MySQL, los derechos de acceso se establecen por usuario. Si los privilegios son insuficientes, se deniega el acceso a la base de datos.

Cómo verificar privilegios

Utiliza el siguiente comando para comprobar los privilegios del usuario.

SHOW GRANTS FOR 'username'@'hostname';

Si los privilegios requeridos no están concedidos, debes otorgar los derechos apropiados.

Desajuste del nombre de host

En MySQL, un usuario puede estar configurado para permitir conexiones solo desde hosts específicos (por ejemplo, localhost o una dirección IP). En consecuencia, si el nombre de host no coincide, la conexión será rechazada.

Cómo comprobar la configuración del host

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

Ejecutar este comando muestra la lista de hosts permitidos para el usuario especificado. Si el host que se está conectando actualmente no está en la lista, la conexión será denegada.

Problemas de configuración de MySQL

Los problemas en el archivo de configuración de MySQL (normalmente my.cnf o my.ini) también pueden causar errores. En particular, la configuración bind-address puede tener un impacto.

Cómo verificar la configuración

Abre el archivo de configuración y revisa la entrada bind-address.

bind-address = 127.0.0.1

En este caso, las conexiones remotas no están permitidas, por lo que el acceso externo es denegado.
Si deseas permitir conexiones remotas, cámbialo a bind-address = 0.0.0.0 y reinicia MySQL.

4. Solución

Verificar nombre de usuario y contraseña

Primero, verifica que las credenciales actuales sean correctas.

Pasos

  1. Ejecuta el siguiente comando e intenta iniciar sesión con el nombre de usuario y la contraseña correctos.
mysql -u username -p
  1. Si no puedes iniciar sesión incluso después de ingresar la contraseña correcta, debes restablecerla.

Restableciendo la Contraseña

SET PASSWORD FOR 'username'@'hostname' = PASSWORD('new_password');

Configurando los Privilegios del Usuario

Verifica que se hayan otorgado los privilegios necesarios y, si falta alguno, asigna los privilegios correspondientes.

Verificar Privilegios

SHOW GRANTS FOR 'username'@'hostname';

Otorgar Privilegios

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'hostname';
FLUSH PRIVILEGES;

Esto otorga al usuario todos los privilegios y aplica los cambios.

Corrigiendo el Nombre de Host

Si la configuración del host está causando errores, debes establecer el host adecuado.

Verificar Configuración del Host

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

Modificar Configuración del Host

UPDATE mysql.user SET Host='%' WHERE User='username';
FLUSH PRIVILEGES;

% permite conexiones desde cualquier host. Sin embargo, dado que esto representa un riesgo de seguridad, se recomienda especificar una dirección IP particular cuando sea apropiado.

Cambiando la Configuración de MySQL

Edita el archivo de configuración (my.cnf o my.ini) para establecer restricciones de conexión adecuadas.

Editar Archivo de Configuración

Para entornos Linux:

sudo nano /etc/mysql/my.cnf

Para entornos Windows:

C:ProgramDataMySQLMySQL Server X.Xmy.ini

(X.X varía según la versión de MySQL.)

Verificar la Configuración de bind-address

bind-address = 127.0.0.1

Con esta configuración, las conexiones solo se permiten desde localhost. Para permitir conexiones remotas, cámbiala de la siguiente manera.

bind-address = 0.0.0.0

Reiniciar MySQL para Aplicar los Cambios

sudo systemctl restart mysql

O (en Windows):

net stop MySQL
net start MySQL

Este método puede resolver muchos errores de “Acceso denegado para el usuario”. A continuación, revisa las Preguntas Frecuentes (FAQ).

5. FAQ (Preguntas Frecuentes)

P1: ¿Qué debo hacer si el error no se resuelve?

R1: Por favor, revisa el registro de errores.

Revisar el registro de errores de MySQL es eficaz para identificar la causa del error.

Linux:

sudo cat /var/log/mysql/error.log

Windows:

La ruta predeterminada del registro de errores es una de las siguientes:

C:ProgramDataMySQLMySQL Server X.Xerror.log

Revisa el registro y soluciona el problema según los mensajes de error específicos.

P2: ¿Por qué solo un usuario específico experimenta el error?

R2: La configuración del host o los privilegios del usuario afectado pueden ser la causa.

Utiliza el siguiente comando para verificar los privilegios del usuario afectado.

SHOW GRANTS FOR 'username'@'hostname';

Además, verifica si la configuración del host es correcta.

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

Si la configuración del host es incorrecta, corrígela adecuadamente.

UPDATE mysql.user SET Host='%' WHERE User='username';
FLUSH PRIVILEGES;

P3: ¿Cómo lo restablezco si olvido mis credenciales de inicio de sesión?

R3: Inicia MySQL en modo seguro y restablece la contraseña.

Linux:

sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables &
mysql -u root

Luego, restablece la contraseña con el siguiente comando.

UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;

Reinicia MySQL.

sudo systemctl restart mysql

Windows:

  1. Abre la Línea de Comandos con privilegios de administrador y inicia MySQL en modo seguro.
net stop MySQL
mysqld --skip-grant-tables
  1. En otra Línea de Comandos, conéctate a MySQL y restablece la contraseña.
mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
  1. Reinicia MySQL.
net start MySQL

You can reset a forgotten password using this procedure.
Esta sección de preguntas frecuentes cubrió pasos de solución de problemas para errores no resueltos y respondió preguntas comunes. Finalmente, revisa el resumen del artículo.

6. Resumen

En este artículo, explicamos en detalle el error “Acceso denegado para el usuario” que ocurre en MySQL. Este error suele deberse a credenciales incorrectas, privilegios insuficientes, errores de configuración del host o malconfiguraciones de MySQL.

Puntos clave de este artículo