MySQL ERROR 1045 (28000): Acceso denegado para el usuario ‘bill’ @ ‘localhost’ (usando la contraseña: YES)

Primero permítanme mencionar que he pasado por muchas preguntas sugeridas y que no encontré ninguna respuesta relevante. Esto es lo que estoy haciendo.

Estoy conectado a mi instancia de Amazon EC2. Puedo iniciar sesión con la raíz de MySQL con este comando:

mysql -u root -p 

Luego creé una nueva cuenta de usuario con host%

 CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass'; 

Concedido todos los privilegios a la cuenta del usuario:

 grant all privileges on *.* to 'bill'@'%' with grant option; 

Luego salgo del usuario raíz y trato de iniciar sesión con la cuenta:

 mysql -u bill -p 

ingresó la contraseña correcta y obtuvo este error:

ERROR 1045 (28000): Acceso denegado para el usuario ‘bill’ @ ‘localhost’ (usando la contraseña: YES)

Probablemente tengas un usuario anónimo ''@'localhost' o ''@'127.0.0.1' .

Según el manual :

Cuando son posibles múltiples coincidencias, el servidor debe determinar cuál de ellas usar. Resuelve este problema de la siguiente manera: (…)

  • Cuando un cliente intenta conectarse, el servidor examina las filas [de la tabla mysql.user] en orden ordenado.
  • El servidor usa la primera fila que coincide con el nombre de host del cliente y el nombre de usuario.

(…) El servidor usa reglas de clasificación que ordenan primero filas con los valores de host más específicos . Los nombres de host literales [como ‘localhost’] y las direcciones IP son los más específicos.

Por lo tanto, dicho usuario anónimo “enmascararía” a cualquier otro usuario como '[any_username]'@'%' cuando se conecta desde localhost .

'bill'@'localhost' no coincide con 'bill'@'%' , pero podría coincidir (ej.) ''@'localhost' beforehands.

La solución recomendada es eliminar a este usuario anónimo (esto, por lo general, es bueno hacerlo de todos modos).


Las ediciones abajo son en su mayoría irrelevantes para la pregunta principal. Estos solo están destinados a responder algunas preguntas planteadas en otros comentarios dentro de este hilo.

Editar 1

Autenticando como 'bill'@'%' través de un socket.


     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock
     Bienvenido al monitor MySQL (...)

     mysql> SELECCIONE usuario, host DESDE mysql.user;
     + ------ + ----------- +
     |  usuario |  host |
     + ------ + ----------- +
     |  proyecto de ley |  % |
     |  raíz |  127.0.0.1 |
     |  raíz |  :: 1 |
     |  raíz |  localhost |
     + ------ + ----------- +
     4 filas en el conjunto (0.00 seg)

     mysql> SELECT USER (), CURRENT_USER ();
     + ---------------- + ---------------- +
     |  USUARIO () |  CURRENT_USER () |
     + ---------------- + ---------------- +
     |  bill @ localhost |  factura @% |
     + ---------------- + ---------------- +
     1 fila en el set (0.02 seg)

     mysql> MOSTRAR VARIABLES COMO 'skip_networking';
     + ----------------- + ------- +
     |  Variable_name |  Valor |
     + ----------------- + ------- +
     |  skip_networking |  ON |
     + ----------------- + ------- +
     1 fila en el set (0.00 seg)

Editar 2

Exactamente la misma configuración, excepto que volví a activar la red, y ahora creo un usuario anónimo ''@'localhost' .


     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql
     Bienvenido al monitor MySQL (...)

     mysql> CREAR USUARIO '' @ 'localhost' IDENTIFICADO POR 'anotherpass';
     Consulta OK, 0 filas afectadas (0.00 seg)

     mysql> Adiós

     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
         --socket = / tmp / mysql-5.5.sock
     ERROR 1045 (28000): Acceso denegado para el usuario 'bill' @ 'localhost' (usando la contraseña: YES)
     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
         -h127.0.0.1 --protocol = TCP
     ERROR 1045 (28000): Acceso denegado para el usuario 'bill' @ 'localhost' (usando la contraseña: YES)
     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
         -hlocalhost --protocol = TCP
     ERROR 1045 (28000): Acceso denegado para el usuario 'bill' @ 'localhost' (usando la contraseña: YES)

Editar 3

La misma situación que en la edición 2, ahora proporciona la contraseña del usuario anónimo.


     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
     Bienvenido al monitor MySQL (...)

     mysql> SELECT USER (), CURRENT_USER ();
     + ---------------- + ---------------- +
     |  USUARIO () |  CURRENT_USER () |
     + ---------------- + ---------------- +
     |  bill @ localhost |  @localhost |
     + ---------------- + ---------------- +
     1 fila en el set (0.01 seg)

Conclusión 1, de la edición 1: uno puede autenticarse como 'bill'@'%' través de un socket.

Conclusión 2, de edición 2: Si uno se conecta a través de TCP o a través de un socket no tiene ningún impacto en el proceso de autenticación (excepto que uno no puede conectarse como cualquier otra persona excepto 'something'@'localhost' través de un socket, obviamente).

Conclusión 3, de la edición 3: aunque especifiqué -ubill , se me ha otorgado acceso como usuario anónimo. Esto se debe a las “reglas de clasificación” recomendadas anteriormente. Tenga en cuenta que en la mayoría de las instalaciones predeterminadas, existe un usuario anónimo sin contraseña (y debe protegerse / eliminarse).

Tratar:

 ~$ mysql -u root -p Enter Password: mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option; 

Cuando corres

 mysql -u bill -p 

y obtuve este error

 ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) 

mysqld espera que te conectes como bill@localhost

Intenta crear bill@localhost

 CREATE USER bill@localhost IDENTIFIED BY 'passpass'; grant all privileges on *.* to bill@localhost with grant option; 

Si desea conectarse de forma remota, debe especificar el nombre DNS, la IP pública o 127.0.0.1 usando TCP / IP:

 mysql -u bill -p -hmydb@mydomain.com mysql -u bill -p -h10.1.2.30 mysql -u bill -p -h127.0.0.1 --protocol=TCP 

Una vez que inicie sesión, ejecute este

 SELECT USER(),CURRENT_USER(); 

USER () informa cómo intentó autenticarse en MySQL

CURRENT_USER () informa cómo se te permitió autenticarte en MySQL desde la tabla mysql.user

Esto le dará una mejor visión de cómo y por qué se le permitió iniciar sesión en mysql. ¿Por qué es importante conocer esta visión? Tiene que ver con el protocolo de ordenación de autenticación de usuario.

Aquí hay un ejemplo: Crearé un usuario anónimo en mi escritorio MySQL

 mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | lwdba | % | | mywife | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 7 rows in set (0.00 sec) mysql> grant all on *.* to x@'%'; Query OK, 0 rows affected (0.02 sec) mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | lwdba | % | | mywife | % | | x | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 8 rows in set (0.00 sec) mysql> update mysql.user set user='' where user='x'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | | % | | lwdba | % | | mywife | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 8 rows in set (0.00 sec) mysql> 

OK, mírame iniciar sesión como usuario anónimo:

 C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.5.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select user(),current_user(); +---------------+----------------+ | user() | current_user() | +---------------+----------------+ | rol@localhost | @% | +---------------+----------------+ 1 row in set (0.00 sec) mysql> 

El orden de autenticación es muy estricto. Controla de lo más específico a lo menos. Escribí sobre este estilo de autenticación en el DBA StackExchange .

No se olvide de llamar explícitamente a TCP como protocolo para el cliente mysql cuando sea necesario.

Cuando escribe mysql -u root -p , se está conectando al servidor mysql en un socket local de Unix.

Sin embargo, la concesión que usted otorgó, 'bill'@'%' solo concuerda con las conexiones TCP / IP.

Si desea otorgar acceso al socket local de Unix, debe otorgar privilegios para ‘bill’ @ ‘localhost’, que curiosamente no es lo mismo que ‘bill’@’127.0.0.1’

También puede conectarse utilizando TCP / IP con el cliente de línea de comando mysql, para que coincida con los privilegios que ya ha otorgado, por ejemplo, ejecute mysql -u root -p -h 192.168.1.123 o cualquiera que sea la dirección IP local que tenga su caja.

Si olvida su contraseña o si desea modificar su contraseña, puede seguir estos pasos:

1: deja tu mysql

[root @ maomao ~] # service mysqld stop
Detener MySQL: [OK]

2: use “–skip-grant-tables” para reiniciar mysql

[root @ mcy400 ~] # mysqld_safe –skip-grant-tables
[root @ cy400 ~] # Iniciando el demonio mysqld con bases de datos de / var / lib / mysql

3: abre una nueva ventana e ingresa mysql -u root

[root @ cy400 ~] # mysql -u root
Bienvenido al monitor MySQL. Los comandos terminan con; o \ g.

4: cambiar la base de datos de usuario

mysql> use mysql
Lectura de la información de la tabla para completar los nombres de tabla y columna Puede desactivar esta característica para obtener un inicio más rápido con la modificación de la base de datos -A

5: modifique su contraseña, su nueva contraseña debe ingresarse en “()”

mysql> update user set contraseña = contraseña (‘root123’) donde user = ‘root’;
Consulta OK, 3 filas afectadas (0.00 seg)
Filas coincidentes: 3 Modificado: 3 Advertencias: 0

6: color

mysql> privilegios de descarga;

7: dejar de fumar

mysql> salir
Adiós

8: reiniciar mysql

[root @ cy400 ~] # service mysqld restart;
Detener MySQL: [OK]
Iniciando MySQL: [OK]

¡Bingo! Puedes conectar tu base de datos con tu nombre de usuario y contraseña nueva:

 [root@cy400 ~]# mysql -u root -p 
Enter password: admin123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.77 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> quit
Bye

Un problema relacionado en mi caso fue tratar de conectar usando:

 mysql -u mike -p mypass 

El espacio en blanco IS aparentemente está permitido entre -u # uname # pero NO entre la contraseña -p y #

Por lo tanto, necesitaba:

 mysql -u mike -pmypass 

De lo contrario, con un espacio en blanco entre -p mypass mysql toma ‘mypass’ como el nombre db

Ahórrese de un gran dolor de cabeza … Su problema podría ser que le faltan las comillas en torno a la contraseña. Al menos ese fue mi caso que me desvió por 3 horas.

 [client] user = myusername password = "mypassword" # <----------------------- VERY IMPORTANT (quotes) host = localhost 

http://dev.mysql.com/doc/refman/5.7/en/option-files.html

Busque "Aquí hay un archivo de opción de usuario típico:" y vea el ejemplo que indican allí. Buena suerte, y espero salvar a alguien más en algún momento.

¡La solución es eliminar el usuario anónimo (Cualquiera)!

También me enfrenté al mismo problema en la configuración de un servidor por parte de otra persona. Normalmente no elijo crear un usuario anónimo al instalar MySQL, por lo que no lo había notado. Inicialmente, inicié sesión como usuario “raíz” y creé un par de usuarios “normales” (también conocidos como usuarios con privilegios solo en dbs con su nombre de usuario como prefijo), luego cerré la sesión y seguidamente verifiqué al primer usuario normal. No pude iniciar sesión. Ni a través de phpMyAdmin, ni a través de shell. Resulta que el culpable es este usuario “Cualquiera”.

Súper tarde para esto

Intenté todas estas otras respuestas y ejecuté muchas versiones diferentes de mysql -u root -p pero nunca corrí solo


mysql -u root -p

Y simplemente presionando [ENTER] para la contraseña.


Una vez que lo hice, funcionó. Espero que esto ayude a alguien.

La mejor solución que encontré para mí es.

mi usuario es sonar y cada vez que trato de conectarme a mi base de datos desde una máquina externa o de otro tipo, recibo un error como

 ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES) 

Además, como estoy intentando esto desde otra máquina y mediante el trabajo de Jenkins, mi URL para acceder es

 alm-lt-test.xyz.com 

si desea conectarse de forma remota, puede especificarlo de diferentes maneras, de la siguiente manera:

 mysql -u sonar -p -halm-lt-test.xyz.com mysql -u sonar -p -h101.33.65.94 mysql -u sonar -p -h127.0.0.1 --protocol=TCP mysql -u sonar -p -h172.27.59.54 --protocol=TCP 

Para acceder a esto con URL, solo tiene que ejecutar la siguiente consulta.

 GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar'; 

De acuerdo, no estoy seguro, pero probablemente este sea mi archivo .cnf dentro del directorio de instalación de MySQL, es el culpable. Comente esta línea y el problema podría resolverse.

 bind-address = 127.0.0.1 

Es una diferencia entre:

 CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass'; 

y

 CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass'; 

Revisalo:

 mysql> select user,host from mysql.user; +---------------+----------------------------+ | user | host | +---------------+----------------------------+ | bill | % | <=== created by first | root | 127.0.0.1 | | root | ::1 | | root | localhost | | bill | localhost | <=== created by second +---------------+----------------------------+ 

El comando

 mysql -u bill -p 

acceso implícito a 'bill' @ 'localhost' y NO a 'bill' @ '%'.

No hay permisos para 'bill' @ 'localhost'

obtienes el error:

 ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) 

resolviendo el problema:

 CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass'; grant all privileges on . to 'bill'@'localhost' with grant option; 

Esto también ocurre cuando su contraseña contiene algunos caracteres especiales como @, $, etc. Para evitar esta situación, puede ajustar la contraseña entre comillas simples:

 $ mysql -usomeuser -p's0mep@$$w0Rd' 

O bien, no use la contraseña al ingresar. Déjelo en blanco y luego tipee cuando el terminal lo solicite. Esta es la forma recomendada.

 $ mysql -usomeuser -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 191 Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 

Solo quería que supieras una circunstancia inusual. Recibí el mismo error. Quizás esto ayude a alguien en el futuro.

Desarrollé algunas vistas base, creadas en el sitio de desarrollo y las transferí al sitio de producción. Más tarde esa semana cambié un script PHP y de repente aparecieron errores que indicaban que Access fue denegado para el usuario ‘local-web-user’ @ ‘localhost’. El objeto de la fuente de datos no había cambiado, así que me concentré en el usuario de la base de datos en MySQL, preocupándome mientras alguien pirateaba mi sitio web. Afortunadamente, el rest del sitio parecía ileso.

Más tarde resultó que los puntos de vista eran los culpables. Nuestras transferencias de objetos se realizan utilizando otro usuario (y remoto: admin @ ip-address) que el usuario del sitio web local. Entonces las vistas se crearon con ‘admin’ @ ‘ip-address’ como el definidor. La vista de creación de SEGURIDAD predeterminada es

 SQL SECURITY DEFINER 

Cuando el usuario de la web local intenta usar la vista, tropieza con los privilegios deficientes del definidor para usar las tablas. Una vez que se cambió la seguridad a:

 SQL SECURITY INVOKER 

el problema fue resuelto El problema real fue completamente diferente al anticipado basado en el mensaje de error.

No estoy seguro si alguien más lo encontrará útil, pero me encontré con el mismo error y busqué por todos los usuarios anónimos … y no había ninguno. El problema terminó siendo que la cuenta de usuario se configuró en “Requerir SSL”, que encontré en PHPMyAdmin yendo a Cuentas de usuario y haciendo clic en Editar privilegios para el usuario. ¡Tan pronto como desactivé esta opción, todo funcionó como esperaba!

Para mí, este problema fue causado por una nueva característica de MySQL 5.7.2: user entradas de user se ignoran si su campo de plugin está vacío.

mysql_native_password por ejemplo, mysql_native_password para mysql_native_password :

 UPDATE user SET plugin='mysql_native_password' WHERE user='foo'; FLUSH PRIVILEGES; 

Consulte las notas de la versión de MySQL 5.7.2 , en «Notas de autenticación».

Por alguna razón (tal vez porque mis hashes de contraseña anteriores a la 4.1 fueron eliminados), la mysql_upgrade comandos mysql_upgrade no configuró un valor de complemento predeterminado.

Descubrí al notar el siguiente mensaje de advertencia en /var/log/mysql/error.log :

[Advertencia] La entrada de usuario ‘foo’ @ ‘%’ tiene un valor de complemento vacío. El usuario será ignorado y ya nadie puede iniciar sesión con este usuario.

Publiqué esta respuesta aquí para tal vez salvar a alguien de usar la misma cantidad de tiempo ridícula en esto como lo hice.

Espero que no hayas hecho más daño al eliminar también el usuario debian-sys-maint en mysql

Haga que su daemon mysql funcione de la manera normal. Inicie su cliente mysql como se muestra a continuación

 mysql -u debian-sys-maint -p 

En otra terminal, cat el archivo /etc/mysql/debian.cnf . Ese archivo contiene una contraseña; pega esa contraseña cuando se le solicite.

http://ubuntuforums.org/showthread.php?t=1836919

Resumen de depuración

  • Compruebe si hay errores tipográficos: nombre de usuario o contraseña.
  • Compruebe el nombre de host y compárelo con el nombre de host de la tabla mysql.user.
  • Compruebe que el usuario existe o no.
  • Compruebe si el host contiene la dirección IP o el nombre de host.

Existe una gran posibilidad de que haya tenido este problema varias veces en su trabajo. Este problema se me ocurrió la mayoría de las veces debido al ingreso incorrecto de nombre de usuario o contraseña. Aunque esta es una de las razones, existen otras muchas posibilidades de que puedas tener este problema. A veces, se ve muy similar, pero cuando profundizas más, te darás cuenta de múltiples factores que contribuyen a este error. Esta publicación explicará en detalle la mayoría de los motivos comunes y solucionará este problema.

Posibles razones:

  • Caso 1: error tipográfico: nombre de usuario o contraseña.

Esta es la razón más común para este error. Si ingresó el nombre de usuario o la contraseña incorrectamente, seguramente obtendrá este error.

Solución:

La solución para este tipo de error es muy simple. Simplemente ingrese el nombre de usuario y la contraseña correctos. Este error será resuelto En caso de que olvide la contraseña, puede restablecer el nombre de usuario / contraseña. Si olvida la contraseña para la cuenta de administrador / raíz, hay muchas formas de restablecer / recuperar la contraseña de root. Publicaré otra publicación sobre cómo restablecer la contraseña de root en caso de que olvide la contraseña de root.

  • Caso 2: Acceder desde el host equivocado.

MySQL proporciona restricciones basadas en el host para el acceso del usuario como características de seguridad. En nuestro entorno de producción, solíamos restringir la solicitud de acceso solo a los servidores de aplicaciones. Esta característica es realmente útil en muchos escenarios de producción.

Solución:

Cuando enfrenta este tipo de problema, primero verifique si su host está permitido o no, marcando la tabla mysql.user. Si no está definido, puede actualizar o insertar un nuevo registro en la tabla mysql.user. En general, el acceso como usuario raíz desde la máquina remota está deshabilitado y no es una buena práctica debido a problemas de seguridad. Si tiene requisitos para acceder a su servidor desde varias máquinas, dé acceso solo a esas máquinas. Es mejor no usar comodines (%) y otorga accesos universales. Permítanme actualizar la tabla mysql.user, ahora el usuario de la demo puede acceder al servidor MySQL desde cualquier host.

  • Caso 3: el usuario no existe en el servidor.

Este tipo de error ocurre cuando el usuario, al que está intentando acceder, no existe en el servidor MySQL.

Soluciones:

Cuando enfrenta este tipo de problema, simplemente verifique si el usuario existe en la tabla mysql.user o no. Si el registro no existe, el usuario no puede acceder. Si hay un requisito para que ese usuario acceda, cree un nuevo usuario con ese nombre de usuario.

  • Caso 4: combinación de hosts numéricos y de nombre.

Puntos importantes

  • No es aconsejable usar comodines mientras se define el host del usuario, intente usar el nombre de host exacto.

  • Deshabilite el inicio de sesión raíz desde la máquina remota.

  • Utilice el concepto de usuario proxy.

Hay pocos otros conceptos relacionados con este tema y entrar en detalles de esos temas es un scope muy diferente de este artículo. Examinaremos los siguientes temas relacionados en los próximos artículos.

  • Qué hacer si olvidó la contraseña de root en el servidor MySQL.
  • Problemas de privilegios de acceso MySQL y tablas relacionadas con los usuarios.
  • Funciones de seguridad MySQL con mejores prácticas.

Espero que esta publicación te ayude a corregir el Código de error MySQL 1045 Acceso denegado para el usuario en MySQL.

En la ventana, Cómo resolver ERROR 1045 (28000): Acceso denegado para el usuario ‘root’ @ ‘localhost’ (usando la contraseña: NO)

 1) Uninstall mysql from control panel 2)Delete MySql folder from C:\Program Files,C:\Program Files (x86) and C:\ProgramData 3)Install mysql 

Resolví esto borrando las viejas entradas de “factura” del usuario con errores (esta es la parte importante: ambas desde mysql.user y mysql.db ), luego creé el mismo usuario que sad antes:

 FLUSH PRIVILEGES; CREATE USER bill@localhost IDENTIFIED BY 'passpass'; grant all privileges on *.* to bill@localhost with grant option; FLUSH PRIVILEGES; 

Trabajado, el usuario se está conectando. Ahora eliminaré algunas de las anteriores 🙂

Tuve un problema similar: en mi primer bash de ingresar a MySql, como root, me indicó acceso denegado. Resulta que olvidé usar el sudo …

Entonces, si falla en el primer bash de root, intente:

sudo mysql -u root -p

y luego ingrese su contraseña, esto debería funcionar.

Encontré el mismo error. La configuración que no funcionaba era la siguiente:

 define("HOSTNAME", "localhost"); define("HOSTUSER", "van"); define("HOSTPASS", "helsing"); define("DBNAME", "crossbow"); $connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS); 

La configuración editada a continuación es la que lo hizo funcionar. Observe la diferencia?

 define('HOSTNAME', 'localhost'); define('HOSTUSER', 'van'); define('HOSTPASS', 'helsing'); define('DBNAME', 'crossbow'); $connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS); 

La diferencia son las comillas dobles. Parecen ser bastante significativos en PHP en comparación con Java y tienen un impacto cuando se trata de escapar de los personajes, configurar URL y ahora, pasar parámetros a una función. Son más bonitas (lo sé), pero siempre usan comillas simples tanto como sea posible, luego se pueden anidar las comillas dobles si es necesario.

Este error surgió cuando probé mi aplicación en una caja Linux en oposición a un entorno Windows.

Los nombres de las cuentas MySQL consisten en un nombre de usuario y un nombre de host. El nombre ‘localhost’ en el nombre de host indica el host local también. Puede utilizar los caracteres comodín “%” y “_” en los valores de nombre de host o dirección IP. Estos tienen el mismo significado que para las operaciones de coincidencia de patrones realizadas con el operador LIKE. Por ejemplo, un valor de host de ‘%’ coincide con cualquier nombre de host, mientras que un valor de ‘% .mysql.com’ coincide con cualquier host en el dominio de mysql.com. ‘192.168.1.%’ Coincide con cualquier host en la red de clase C 192.168.1.

Arriba fue solo una presentación:

en realidad, tanto los usuarios 'bill'@'localhost' como 'bill'@'%' son cuentas MySQL diferentes, por lo tanto, ambos deben usar sus propios detalles de autenticación, como la contraseña.

Para obtener más información, consulte http://dev.mysql.com/doc/refman//5.5/en/account-names.html

Cuando ejecuta mysql -u bill -p , localhost se resuelve en su ip, ya que es 127.0.0.1 y en su /etc/hosts , ya que por defecto existe 127.0.0.1 localhost . Entonces, mysql lo interpreta como bill@localhost que no se concede con bill@'%' . Esta es la razón por la cual hay 2 registros diferentes para el usuario root en el resultado de select host, user from mysql.user; consulta.

Hay dos formas de manejar este problema.

Una es la especificación de una ip que no se resuelve de forma inversa mediante el /etc/hosts cuando intenta iniciar sesión. Por ejemplo, la ip del servidor es 10.0.0.2 . Cuando ejecuta el comando mysql -u bill -p -h 10.0.0.2 , podrá iniciar sesión. Si escribe select user(); , obtendrá bill@10.0.0.2 . Por supuesto, cualquier nombre de dominio no debe resolverse en esta ip en su /etc/hosts .

En segundo lugar, necesita otorgar acceso para este nombre de dominio específico. Para bill@localhost , debe llamar al comando grant all privileges on *.* to bill@localhost identified by 'billpass'; . En este caso, podrá iniciar sesión con el comando mysql -u bill -p . Una vez que se haya iniciado la sesión, select user(); El comando devuelve bill@localhost .

Pero esto es solo por lo que intenta iniciar sesión en un servidor mysql en el mismo host. Desde hosts remotos, mysql se comporta de forma esperada, ‘%’ le permitirá iniciar sesión.

Asegúrese de que no haya otras instancias SQL ejecutándose que estén usando la publicación localhost. En nuestro caso, otra instancia se estaba ejecutando en el host local que entraba en conflicto con el inicio de sesión. Al apagarlo, resolvió este problema.

También el problema puede ocurrir si está utilizando una versión anterior de la interfaz de usuario de MySQL (como SQLYoug) que genera contraseñas con hash incorrecto.

Crear un usuario con script SQL solucionará el problema.

I had the same problem, but in my case the solution was solved by the comment by eggyal. I had an anonymous user as well, but removing it didn’t solve the problem. The ‘FLUSH PRIVILEGES’ command worked though.

The surprising thing to me about this was that I created the user with MySQL Workbench and I would have expected that to perform all of the necessary functions to complete the task.

El signo de porcentaje significa todas las ip, por lo que localhost es superfluo … No es necesario el segundo registro con el host local.

Actually there is, ‘localhost’ is special in mysql, it means a connection over a unix socket (or named pipes on windows I believe) as opposed to a TCP/IP socket. using % as the host does not include ‘localhost’

MySQL user accounts have two components: a user name and a host name. The user name identifies the user, and the host name specifies what hosts that user can connect from. The user name and host name are combined to create a user account:

''@'' You can specify a specific IP address or address range for host name, or use the percent character (“%”) to enable that user to log in from any host.

Note that user accounts are defined by both the user name and the host name. For example, 'root'@'%' is a different user account than 'root'@'localhost' .

I had the same issue as the OP while trying to access a MYSQL docker container built with compose that had a really long password:

 # docker-compose.yml snippet services: db: environment: MYSQL_ROOT_PASSWORD: some_password_more_than_32_characters 

Reducing the password length and rebuilding via compose enabled me to access the MYSQL container with a client like Workbench.

For Mac users if they still have the problem (as was my case), I found this solution worked for me: MySQL command line ‘-bash command not found’

To use command ie mysql on macbook terminal you need to export path using:

 export PATH=$PATH:/usr/local/mysql/bin/ 

Considering default installation, use following command to get mysql prompt as root user:

 mysql -u root 

Otherwise you are using wrong root password.

Ref: Setting the MySQL root user password on OSX

    Intereting Posts