Introducción
Este artículo es para los usuarios que están tratando de iniciar sesión en MySQL con una contraseña correcta pero están recibiendo un error: «Error 1045: Acceso denegado para el usuario (usando la contraseña: YES)»
Si ha olvidado su contraseña de root de MySQL, por favor vea este artículo:
- Cómo restablecer la contraseña de root de MySQL.
Si está intentando iniciar sesión como root a través de phpMyAdmin, por favor vea:
- No puede iniciar sesión en phpMyAdmin: mysqli_real_connect(): (HY000/1698): Acceso denegado para el usuario ‘root’@’localhost’
Entendiendo los usuarios y hosts de MySQL
MySQL restringe el acceso de los usuarios basándose en el valor host
de un usuario. Por defecto, el valor host
para la cuenta root y los nuevos usuarios se establece en localhost
, lo que significa que sólo se puede iniciar sesión a través de la máquina local o a través de phpMyAdmin si se instala en el mismo localhost. Si intenta iniciar sesión en una cuenta localhost
de forma remota, puede rechazar su contraseña correcta con «Acceso denegado para el usuario (usando la contraseña: SÍ)».
Si miramos esta simple lista de usuarios de MySQL a continuación como un ejemplo:
+------------------+-------------+| User | Host |+------------------+-------------+| test-user1 | localhost || test-user3 | 10.0.53.185 || test-user2 | % |
Encima tenemos tres usuarios de MySQL con diferentes valores host
.
Veamos algunos escenarios en los que su contraseña correcta puede ser rechazada dependiendo del valor host
:
- Usuario
- ✅ Puede iniciar sesión desde el
localhost
, es decir, la máquina en la que se está ejecutando el servicio MySQL. - ✅ Puede iniciar sesión desde phpMyAdmin si está instalado en el mismo localhost.
- ❌No puede iniciar sesión de forma remota y obtendrá «Acceso denegado para el usuario (usando la contraseña: YES)».
- ✅ Puede iniciar sesión desde el
- Usuario
- ✅Sólo puede iniciar sesión desde la dirección IP
10.0.53.185
. - ❌No puede iniciar sesión desde ninguna otra dirección IP «Access denied for user (using password: YES)».
- ❌ No se puede iniciar la sesión desde localhost «Access denied for user (using password: YES)».
- ❌ No se puede iniciar la sesión desde phpMyAdmin «Access denied for user (using password: YES)».
- ✅Sólo puede iniciar sesión desde la dirección IP
- Usuario
%
- ✅ Puede iniciar sesión desde cualquier lugar (
%
es un comodín).
- ✅ Puede iniciar sesión desde cualquier lugar (
Cambiar el valor del host de un usuario de MySQL
Puede cambiar el valor del host para un usuario que utilice la cuenta raíz de MySQL o cualquier cuenta con privilegios de superusuario. Esto se puede hacer a través de la línea de comandos o de phpMyAdmin.
A través de la línea de comandos
Necesitará acceder a su base de datos MySQL usando root o un superusuario que tenga acceso a la tabla de usuarios de MySQL.
La cuenta root es por defecto sólo accesible desde localhost, por lo que puede obtener «Acceso denegado para el usuario (usando la contraseña: YES)» si intenta iniciar sesión de forma remota. En tal caso, tendrá que obtener de alguna manera el acceso local al servidor.
Para iniciar la sesión en una base de datos MySQL local:
mysql -u root -p
Para iniciar la sesión en una base de datos MySQL remota, simplemente sustituya hostname_or_ip
por el suyo.
mysql -u root -h hostname_or_ip -p
Una vez iniciada la sesión en MySQL, liste todos los usuarios de MySQL y sus correspondientes hosts en su base de datos.
SELECT User,Host FROM mysql.user;
Resultado:
+------------------+-------------+| User | Host |+------------------+-------------+| test-user1 | localhost || test-user3 | 10.0.53.185 || test-user2 | % |+------------------+-------------+3 rows in set (0.00 sec)
Encima podemos ver una lista de los usuarios de MySQL y sus hosts.
Si queremos entrar usando test-user1
remotamente desde cualquier lugar, debemos cambiar el valor del host por el comodín %
, que permitirá entrar remotamente desde cualquier lugar. Para mayor seguridad, podría cambiar esto a una dirección IP.
En el ejemplo siguiente, estamos cambiando el host para test-user1
de localhost
a %
%
significa comodín y permitirá a este usuario iniciar sesión de forma remota desde cualquier lugar.
RENAME USER 'test-user1'@'localhost' TO 'test-user1'@'%';
Debe vaciar los privilegios de MySQL para que los cambios surtan efecto.
FLUSH PRIVILEGES;
Ahora intente iniciar sesión de nuevo de forma remota.
Vía phpMyAdmin
Ingrese en phpMyAdmin utilizando su cuenta de root o una cuenta con privilegios de superusuario.
- Una vez iniciada la sesión en phpMyadmin, haga clic en la base de datos
mysql
en la columna de la izquierda. - Haga clic en la pestaña SQL.
- Escriba o pegue en el cuadro de consulta SQL:
SELECT User,Host FROM mysql.user;
para listar todos los usuarios de MySQL en la base de datos. - Haga clic en Ir para ejecutar la consulta.
Ahora debería ver una lista de todos los usuarios de MySQL y sus correspondientes hosts.
Para cambiar el valor del host de un usuario de MySQl:
- Haga doble clic en el campo del host al lado del usuario que desea cambiar (en rojo a continuación).
- Escriba
%
para permitir que cualquiera pueda iniciar sesión en este usuario desde cualquier lugar. También puede cambiar esto a una IP remota para una mejor seguridad. - Pulse
ENTER
en su teclado para guardar los cambios.
No ha terminado todavía. Ahora debe vaciar los privilegios de MySQL.
- Haga clic en la pestaña SQL de nuevo
- Escriba o pegue en el cuadro de consulta SQL:
FLUSH PRIVILEGES;
- Haga clic en Ir para ejecutar la consulta.
Ahora debería poder iniciar sesión de forma remota.
Dime si esto te ha ayudado. Sígueme en Twitter, Facebook y YouTube, o 🍊 cómprame un batido.
p.s. Aumenté mis ingresos de AdSense en un 200% usando AI 🤖. Lee mi reseña de Ezoic para saber cómo.