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

430

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

Estoy conectado a mi instancia de Amazon EC2. Puedo iniciar sesión con MySQL root con este comando:

mysql -u root -p

Luego creé una nueva factura de usuario con el host%

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

Concedidos todos los privilegios para facturar al usuario:

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

Luego salgo del usuario root e intento iniciar sesión con bill:

mysql -u bill -p

ingresé la contraseña correcta y recibí este error:

ERROR 1045 (28000): acceso denegado para el usuario 'factura' @ 'localhost' (usando la contraseña: SÍ)

Ali
fuente
34
Usted FLUSH PRIVILEGES?
eggyal
66
Bien, intenté esto sin ningún éxito. Cualquier otra sugerencia por favor.
Ali
1
¿Qué versión del servidor estás ejecutando? He visto a 5.1 comportarse de manera extraña al respecto.
Poodlehat
2
Esto me sucedió mientras instalaba Magento y cometí un error mucho más tonto. Poner 'mysql -u magento -p magento' me estaba pidiendo una contraseña y, en lugar de la contraseña predeterminada, estaba poniendo la contraseña de root.
AmirHd
2
@authentictech desafortunadamente, ninguna de las soluciones sugeridas funcionó para mí en el momento en que se publicó esta pregunta. Vea mi propia respuesta que me ayudó a salir de esta situación. Esa es la razón por la que no marqué ninguno de ellos como la respuesta. Probablemente puedo marcar la respuesta mejor clasificada como respuesta.
Ali

Respuestas:

442

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

Según el manual :

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

  • Cuando un cliente intenta conectarse, el servidor mira a través de 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 utiliza reglas de clasificación que ordenan primero las 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 '[any_username]'@'%'al conectarse localhost.

'bill'@'localhost'coincide 'bill'@'%', pero coincidiría (por ejemplo) ''@'localhost'antes de las manos.

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


Las ediciones a continuación 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 a 'bill'@'%'través de un zócalo.

    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> SELECCIONAR usuario, host DE mysql.user;
    + ------ + ----------- +
    El | usuario | anfitrión |
    + ------ + ----------- +
    El | factura | % |
    El | raíz | 127.0.0.1 |
    El | raíz | :: 1 |
    El | raíz | localhost |
    + ------ + ----------- +
    4 filas en conjunto (0.00 seg)

    mysql> SELECCIONAR USUARIO (), CURRENT_USER ();
    + ---------------- + ---------------- +
    El | USUARIO () | CURRENT_USER () |
    + ---------------- + ---------------- +
    El | bill @ localhost | bill @% |
    + ---------------- + ---------------- +
    1 fila en conjunto (0.02 seg)

    mysql> MOSTRAR VARIABLES COMO 'skip_networking';
    + ----------------- + ------- +
    El | Nombre_variable | Valor |
    + ----------------- + ------- +
    El | skip_networking | ON |
    + ----------------- + ------- +
    1 fila en conjunto (0.00 seg)

Editar 2

Exactamente la misma configuración, excepto que reactivé las redes 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> Bye

    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 'factura' @ 'localhost' (usando la contraseña: SÍ)
    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 'factura' @ 'localhost' (usando la contraseña: SÍ)
    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 'factura' @ 'localhost' (usando la contraseña: SÍ)

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> SELECCIONAR USUARIO (), CURRENT_USER ();
    + ---------------- + ---------------- +
    El | USUARIO () | CURRENT_USER () |
    + ---------------- + ---------------- +
    El | bill @ localhost | @localhost |
    + ---------------- + ---------------- +
    1 fila en conjunto (0.01 seg)

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

Conclusión 2, de la 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 'something'@'localhost', obviamente, no se puede conectar como nadie más que a través de un socket).

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 asegurarse / eliminarse).

Semilla aleatoria
fuente
99
Para cualquier persona curiosa de por qué 'bill' @ 'localhost' coincide con '' @ 'localhost' como yo, una cadena vacía actúa efectivamente como comodín en el algoritmo de autenticación de MySQL.
Dean o el
2
@Sanja Tenga mucho cuidado con esta solución. Puede permitir el acceso anónimo a su base de datos desde cualquier ubicación. En caso de duda, prefiero eliminar al usuario.
RandomSeed
77
@RandomSeed ¡Gracias por este comentario! Probablemente debería eliminar un usuario anónimo. PS He encontrado dev.mysql.com/doc/refman/5.1/en/default-privileges.html que dice que estos usuarios sin duda se pueden borrar: DROP USER ''@'localhost';. No son necesarios para algún propósito especial.
Alex
1
Dejé caer al usuario anónimo, pero las cosas aún no funcionaban. Luego descubrí que necesitaba emitir también "PRIVILEGIOS DE LAVADO". Sería útil mencionar eso también.
Neeme Praks
2
¡Esta es la respuesta! ¿Por qué esto no viene en negrita mayúscula en cada manual de mysql? ¡BORRE EL USUARIO ANÓNIMO O MATARÁ TODOS SUS INTENTOS PARA INICIAR SESIÓN DESDE LOCALHOST!
Sergei
140

Tratar:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
Edgar Avilés
fuente
10
Esto es bastante peligroso, si alguien piratea su cuenta de bill @ localhost mysql, tendrá acceso infinito a todas las bases de datos de su servidor mysql.
Adonis K. Kakoulidis
2
Whehey Tuve que poner una cita alrededor de mi usuario 'myusername'@'myhost.static.myip.com' y luego funcionó.
bendecko
Eso funciona para mí, pero me temo que le di demasiados privilegios al usuario
Csaba Toth
1
@CsabaToth que hiciste, reduce los privilegios nuevamente hasta que tu usuario tenga lo que necesita y no más.
Jwenting
... ¿y qué haces si esto te da "Acceso denegado para el usuario 'root' @ 'localhost' (usando la contraseña: YES)" entonces?
Grunion Shaftoe
75

Cuando corriste

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 esto

SELECT USER(),CURRENT_USER();

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

CURRENT_USER () informa cómo se le permitió autenticarse 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 saber esta opinión? Tiene que ver con el protocolo de pedido 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 pedido de autenticación es muy estricto. Comprueba de lo más específico a lo menos. Escribí sobre este estilo de autenticación en el DBA StackExchange .

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

RolandoMySQLDBA
fuente
1
'bill'@'localhost'debería coincidir 'bill@%', ¿no?
RandomSeed
@Yak, el orden de clasificación no se basa únicamente en la columna de usuario de mysql.user. MySQL no hace ninguna coincidencia de caracteres per se. Escribí sobre el protocolo de pedido de autenticación de usuario en el DBA StackExchange: dba.stackexchange.com/a/10897/877
RolandoMySQLDBA
@YaK Por eso lo mencioné específicamente SELECT USER(),CURRENT_USER();. Casi nunca se ven usuarios anónimos de estas dos funciones, excepto en configuraciones realmente pobres.
RolandoMySQLDBA
1
Nunca supuse que el orden de clasificación se basa únicamente en mysql.user. De hecho, si vuelve a leer mi respuesta, verá que dije (en realidad, dice el manual) que el orden de clasificación se basa hostprimero en la columna. Escribió mucho sobre cómo verificar sus credenciales actuales, pero veo poca información sobre por qué 'bill'@'localhost'no puede iniciar sesión 'bill'@'%', que es la pregunta de hoy AFAIK. El OP probablemente tenga una configuración deficiente, es por eso que obtiene estos errores.
RandomSeed
2
--protocol=TCPFue la clave. ¡Muchas gracias!
lfx
22

Súper tarde para esto

Intenté todas estas otras respuestas y ejecuté muchas versiones diferentes de mysql -u root -ppero nunca solo ejecuté


mysql -u root -p

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


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

garrettmac
fuente
18

Un problema relacionado en mi caso fue intentar conectar usando:

mysql -u mike -p mypass

El espacio en blanco es aparentemente permitió que entre el -u # uname #, pero no entre el -p y # contraseña #

Por lo tanto, se necesita:

mysql -u mike -pmypass

De lo contrario, con un espacio en blanco entre -p mypass MySQL toma 'mypass' como el db nombre

mstram
fuente
1
o: mysql -u usrname -p: esto evita que alguien vea la contraseña, ya que soltará una nueva línea y solicitará la contraseña sin mostrarla
gran respuesta @mstram
Arpit Solanki
1
esta solución es cómoda, sin embargo, es inseguro escribir la contraseña obviamente, pero no es necesario escribir privilegios de concesión y definir otras cosas. Entonces, si su libro Mac está asegurado, este enfoque es muy cómodo, incluso más lo usé para importar datos a aws desde el controlador docker mysql.
dimpiax
17

Cuando escribe mysql -u root -p, se está conectando al servidor mysql a través de un socket unix local.

Sin embargo, la subvención que otorgó 'bill'@'%'solo coincide con las conexiones TCP / IP curiosamente.

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

También puede conectarse mediante TCP / IP con el cliente de línea de comandos mysql, para que coincida con los privilegios que ya le otorgó, por ejemplo, ejecutar mysql -u root -p -h 192.168.1.123o la dirección IP local que tenga su casilla.

nos
fuente
"'bill' @ '%' solo coincide con las conexiones TCP / IP" Esto está mal. Pruébelo en una instancia limpia (virgen, lista para skip-networking
usar
@YaK No puedo hacer que 'user' @ '%' funcione en una configuración de este tipo, ¿qué quiere decir que se suponía que iba a suceder?
nos
Podría conectarme como 'bill' @ '%' en una v5.0 sin conexión en red (por lo tanto, a través de un socket). Qué versión estás usando? Lo intentaré en una v5.5.
RandomSeed
Por favor vea mi respuesta actualizada. Pude iniciar sesión como a 'bill'@'%'través de un socket en una v5.5.
RandomSeed
17

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

1: detiene tu mysql

[root @ maomao ~] # servicio mysqld deja de
detener MySQL: [OK]

2: use "--skip-grant-tables" para reiniciar mysql

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

3: abra una nueva ventana e ingrese mysql -u root

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

4: cambiar la base de datos del usuario

mysql> use mysql
Lectura de información de la tabla para completar los nombres de las tablas y columnas Puede desactivar esta función para obtener un inicio más rápido con -A Cambio de base de datos

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

mysql> actualizar usuario set contraseña = contraseña ('root123') donde usuario = 'root';
Consulta correcta, 3 filas afectadas (0.00 seg)
Filas coincidentes: 3 Modificadas: 3 Advertencias: 0

6: rubor

mysql> privilegios de descarga;

7: salir

mysql> salir
Bye

8: reiniciar mysql

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

Bingo! Puede conectar su base de datos con su nombre de usuario y nueva contraseña:

[root@cy400 ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor.  Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye
Li Yingjun
fuente
1
Esto me ayudó, pero en mac si lo instalas con homebrew es mysql.server stop. En mi caso, no pude actualizar la columna de usuario porque no hay una; tampoco pudo crear uno porque está en modo seguro. Por lo que estoy haciendo en este momento no me importa, pero realmente aprecio este formato de respuesta con las entradas y salidas exactas que se muestran. ¡Gracias!
szeitlin
Lo siento, nunca he usado Mac antes, así que no puedo ayudarte.
Li Yingjun
15

Ahórrate un dolor de cabeza MAYOR ... Tu problema podría ser que te faltan las comillas alrededor de la contraseña. Al menos ese fue mi caso que me desvió durante 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 opciones de usuario típico:" y vea el ejemplo que dicen allí. Buena suerte y espero salvar a alguien más en algún momento.

mimoralea
fuente
1
Gracias por esto. ¡He perdido medio día en esto y las estúpidas citas sobre la contraseña funcionaron!
guyfromfl
Jaja. Perdí casi lo mismo cuando me pasó a mí. Me alegra ser de ayuda.
mimoralea
12

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

También enfrenté el mismo problema en la configuración de un servidor por otra persona. Normalmente no elijo crear un usuario anónimo al instalar MySQL, así que no me di cuenta de esto. Inicialmente, inicié sesión como usuario "root" 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é sesión y luego 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 "Cualquier".

fevangelou
fuente
11

Tuve un problema algo similar: en mi primer intento de ingresar a MySQL, ya rootque me dijo que tenía acceso denegado. Resulta que olvidé usar el sudo...

Entonces, si falla en el rootprimer intento, intente:

sudo mysql -u root -p

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

David Refaeli
fuente
6

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

mi usuario es sonar y cada vez que intento conectarme a mi base de datos desde una máquina externa u otra, 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 a través del 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';
Abhijeet Kamble
fuente
4

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

bind-address = 127.0.0.1
Ali
fuente
1
Para más detalles, puede ver esto también wiki.bitnami.org/Components/MySQL
Ali
1
Estoy bastante seguro de que este no es el problema. Si así fuera, MySQL rechaza las conexiones desde cualquier host que no sea 127.0.0.1, y no obtendrá un error de SQL 'Acceso denegado'.
The Pellmeister
3

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

Había desarrollado 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 surgieron errores de acceso denegado para el usuario 'local-web-user' @ 'localhost'. El objeto fuente de datos no había cambiado, por lo que me concentré en el usuario de la base de datos en MySQL, preocupándome mientras alguien pirateaba mi sitio web. Afortunadamente, el resto del sitio parecía ileso.

Más tarde resultó que las vistas eran las culpables. Nuestras transferencias de objetos se realizan utilizando otro usuario (y remoto: admin @ dirección IP) que el usuario del sitio web local. Por lo tanto, las vistas se crearon con 'admin' @ 'ip-address' como definidor. El valor predeterminado de SEGURIDAD de creación de vista es

SQL SECURITY DEFINER

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

SQL SECURITY INVOKER

El problema fue resuelto. El problema real era completamente diferente al anticipado según el mensaje de error.

Erik
fuente
1
Esto terminó siendo la fuente de mi problema también: una vista con un "definidor" faltante. Una forma rápida de averiguar si esto es lo que le está sucediendo es intentar consultar la misma tabla o vista como root; si lo hace, el mensaje de error cambia al "ERROR 1449 (HY000) mucho más descriptivo: el usuario especificado como definidor no existe ".
Joshua Davies
3

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;
Gerd
fuente
La declaración de concesión devolvió un error. Necesitaba especificar una base de datos como esta: concede todos los privilegios en newdb. * A ...
LeBird
3

Esto también sucede 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 en su lugar, no use la contraseña al ingresar. Déjelo en blanco y luego escríbalo cuando el terminal le pregunte. 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>
Pranit Más
fuente
3
De hecho, esto puede ser un problema (como lo fue para mí). Todas mis contraseñas para cualquiera de mis cuentas se generan usando pwgen. Hoy generé uno nuevo para una base de datos MySQL y su usuario. Lamentablemente, la contraseña contenía una barra invertida "\" que no identifiqué como el origen de los errores (ni siquiera pensé en eso). Entonces, busqué durante horas una solución. Después de establecer la contraseña en "123" con desesperación, el inicio de sesión finalmente funcionó. ... Los usuarios deben tener en cuenta que algunos caracteres especiales pueden causar problemas, ya que MySQL no muestra advertencias sobre el uso de contraseñas como "daiy4ha4in7chooshuiphie \ Th * aew", por ejemplo.
Arvid
1
Estaba a punto de publicar esto como una respuesta si aún no aparecía, simplemente estaba demasiado abajo en la lista para que lo notara (así que lo estoy subiendo +1)
Asimilater
3

Para mí, este problema fue causado por una nueva característica de MySQL 5.7.2: las userentradas se ignoran si su plugincampo está vacío.

Ajústelo a, por ejemplo, mysql_native_passwordpara volver a habilitarlos:

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 se eliminaron mis hashes de contraseña anteriores a 4.1), el mysql_upgradescript no estableció un valor de complemento predeterminado.

Me di cuenta 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 podrá iniciar sesión con este usuario.

Publico esta respuesta aquí para quizás salvar a alguien de usar la misma cantidad de tiempo ridículo en esto que yo.

maxelost
fuente
2

No estoy seguro de si alguien más lo encontrará útil, pero encontré 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 estaba configurada como "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 se esperaba!

Alan
fuente
2

Resumen de depuración

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

Existe una gran posibilidad de que haya encontrado este problema varias veces en su trabajo. Este problema se me ocurrió la mayoría de las veces debido a que ingresó incorrectamente el nombre de usuario o la contraseña. Aunque esta es una de las razones, hay otras muchas posibilidades de que pueda tener este problema. A veces, se ve muy similar, pero cuando profundice, se dará cuenta de múltiples factores que contribuyen a este error. Esta publicación explicará en detalle, la mayoría de las razones 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 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 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 / root, 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 olvides la contraseña de root.

  • Caso 2: Acceso desde host incorrecto.

MySQL proporciona restricciones basadas en host para el acceso de los usuarios 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 enfrente este tipo de problema, primero verifique si su host está permitido o no, verificando 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 root desde una máquina remota está deshabilitado y no es una práctica recomendada debido a problemas de seguridad. Si tiene requisitos para acceder a su servidor desde múltiples máquinas, otorgue acceso solo a esas máquinas. Es mejor no usar comodines (%) y proporciona accesos universales. Permítanme actualizar la tabla mysql.user, ahora el demouser 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 enfrente 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: mezcla de hosts numéricos y basados ​​en nombres.

Puntos importantes

  • No es aconsejable usar comodines al definir el host del usuario, intente usar el nombre exacto del host.

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

  • Usar el concepto de usuario proxy.

Hay algunos otros conceptos relacionados con este tema y entrar en detalles de esos temas es un alcance 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 del servidor MySQL.
  • Problemas de privilegios de acceso a MySQL y tablas relacionadas con el usuario.
  • Funciones de seguridad MySQL con mejores prácticas.

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

Abhijit Jagtap
fuente
2

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

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

mysql -u debian-sys-maint -p

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

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

ysk
fuente
2

Descubrí otro caso que parece ser un caso de borde; Puedo exportar al sistema de archivos, a través de SELECT INTO .. ​​OUTFILE como root, pero no como usuario habitual. Si bien esto puede ser una cuestión de permisos, lo he visto y no veo nada especialmente obvio. Todo lo que puedo decir es que ejecutar la consulta como un usuario normal que tiene todos los permisos en la base de datos en cuestión devuelve el error de acceso denegado que me llevó a este tema. Cuando encontré la transcripción de un uso exitoso de SELECT INTO ... OUTFILE en un proyecto antiguo, noté que estaba conectado como root. Efectivamente, cuando inicié sesión como root, la consulta se ejecutó como se esperaba.

David A. Gray
fuente
1

Actualización: en v8.0.15 (tal vez esta versión) la PASSWORD()función no funciona.

Tienes que:

  1. Asegúrese de haber detenido MySQL primero.
  2. Ejecute el servidor en modo seguro con omisión de privilegios: sudo mysqld_safe --skip-grant-tables
  3. Iniciar sesión: mysql -u root
  4. mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';
  5. mysql> FLUSH PRIVILEGES;
  6. mysql> exit;
  7. Ingresar de nuevo: mysql -u root
  8. mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
Mohamed Jaleel Nazir
fuente
0

Cuando se ejecuta mysql -u bill -p, localhostse resuelve en su ip, ya que es 127.0.0.1 y en su /etc/hostsarchivo, por defecto 127.0.0.1 localhostexiste. Entonces, mysql te interpreta como algo bill@localhostque no está garantizado bill@'%'. Es por eso que hay 2 registros diferentes para el rootusuario como resultado de la select host, user from mysql.user;consulta.

Hay dos formas de manejar este problema.

Uno está especificando una IP que no se resuelve de forma inversa por /etc/hostsarchivo cuando intenta iniciar sesión. Por ejemplo, la ip del servidor es 10.0.0.2. Cuando ejecute el comando mysql -u bill -p -h 10.0.0.2, podrá iniciar sesión. Si escribe select user();, obtendrá [email protected]. Por supuesto, cualquier nombre de dominio no debe resolverse a esta ip en su /etc/hostsarchivo.

En segundo lugar, debe 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 conectado, el select user();comando regresa bill@localhost.

Pero esto es solo para que intente iniciar sesión en un servidor mysql en el mismo host. Desde hosts remotos, mysql se comporta de manera esperada, '%' le permitirá iniciar sesión.

Shnkc
fuente
0

Resolví esto eliminando las entradas antiguas de 'factura' del usuario con errores (esta es la parte importante: tanto de mysql.user como de 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 previlegies :)

dxvargas
fuente
0

Encontré el mismo error. La configuración que no funcionaba es 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. ¿Nota 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 caracteres, 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, entonces las comillas dobles se pueden anidar dentro de ellas si es necesario.

Este error apareció cuando probé mi aplicación en una caja de Linux en lugar de en un entorno de Windows.

Raymond Wachaga
fuente
0

Tuve problemas similares porque mi contraseña contiene ";" char rompiendo mi contraseña cuando la creo en el primer momento. Tenga cuidado con esto si puede ayudarlo.

Genaut
fuente
0

Esto puede aplicarse a muy pocas personas, pero aquí va. No uses una exclamación! en su contraseña.

Lo hice y obtuve el error anterior usando MariaDB. Cuando lo simplifiqué a solo números y letras, funcionó. Otros personajes como @y$ funcionan bien: utilicé esos caracteres en un usuario diferente en la misma instancia.

La quinta respuesta en esta dirección me llevó a mi solución.

Chiwda
fuente
0

En Windows, aquí se explica cómo resolver:

ERROR 1045 (28000): acceso denegado para el usuario 'root' @ 'localhost' (usando la contraseña: NO)

  1. Desinstalar mysql desde el panel de control
  2. Eliminar la carpeta MySql de C:\Program Files,C:\Program Files (x86)yC:\ProgramData
  3. Instalar mysql
Sanjay
fuente
Intenté todas las otras respuestas, finalmente decidí probar esto y funcionó.
jasonoriordan
0

Esto también puede suceder si MySQL se ejecuta en un sistema operativo que no distingue entre mayúsculas y minúsculas, como Windows.

Por ejemplo, descubrí que falló el intento de conectarme a una base de datos usando estas credenciales:

mysql> grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105

ERROR 1045 (28000): acceso denegado para el usuario 'specialuser'@'10.0.1.113' (usando la contraseña: SÍ)

Pero, esto tuvo éxito:

mysql> grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -h10.300.300.400 databaseV105 -p

Introducir la contraseña:

kguest
fuente
0

¡Hoy en día! Solución para :

MySQL ERROR 1045 (28000): acceso denegado para el usuario 'usuario' @ 'localhost' (usando la contraseña: SÍ);

Wampserver 3.2.0 nueva instalación o actualización

Probablemente xampusarlo mariaDBpor defecto está bien.

Wampel servidor viene con mariaDBy mysql, e instalación mariaDBpor defecto en el puerto 3306 y mysql en 3307, puerto a veces 3308.

Conéctate a mysql!

En la instalación, pide usar mariaDBo MySql, pero mariaDB está marcado como predeterminado y no puede cambiarlo, verifique la mysqlopción e instale.

cuando se complete la instalación, ambos se ejecutarán mariaDBen el puerto predeterminado 3306 y mysqlen otro puerto 3307 o 3308.

Haga clic con el botón derecho en el wampserverícono donde su ejecución debe estar en la esquina inferior derecha, vaya a herramientas y vea su mysqlpuerto de ejecución correcto .

E inclúyalo en su conexión de base de datos igual que folowng:

$host = 'localhost';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$port = '3308';//Port

$dsn = "mysql:host=$host;dbname=$db;port=$port;charset=$charset"; //Add in connection
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

Note : Estoy usando pdo

Vea aquí para más información: https://sourceforge.net/projects/wampserver/

Dlk
fuente
Por favor, no use backticks para enfatizar. Solo deben usarse para el código. Palabras como MySQL o Wampserver no son código.
Dharman