it-swarm.com.de

MySQL-Fehler 1045 (28000): Zugriff für Benutzer 'bill' @ 'localhost' (mit Kennwort: YES) verweigert

Lassen Sie mich zunächst erwähnen, dass ich viele vorgeschlagene Fragen durchgegangen bin und keine relevante Antwort gefunden habe. Hier ist was ich mache.

Ich bin mit meiner Amazon EC2-Instanz verbunden. Ich kann mich mit MySQL root mit diesem Befehl anmelden:

mysql -u root -p

Dann habe ich eine neue Benutzerrechnung mit Host% erstellt. 

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

Erteilt alle Privilegien zur Benutzerrechnung:

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

Dann beende ich mich vom root-Benutzer und versuche mich mit bill anzumelden:

mysql -u bill -p

das richtige Passwort eingegeben und diese Fehlermeldung erhalten:

ERROR 1045 (28000): Zugriff für Benutzer 'bill' @ 'localhost' verweigert (mit Kennwort: YES)

354
Ali

Sie haben wahrscheinlich einen anonymen Benutzer ''@'localhost' oder ''@'127.0.0.1'.

Wie in dem Handbuch :

Wenn mehrere Übereinstimmungen möglich sind, muss der Server ermitteln, welche von sie zu verwenden. Es löst dieses Problem wie folgt: (...)

  • Wenn ein Client versucht, eine Verbindung herzustellen, durchsucht der Server die Zeilen [der Tabelle mysql.user] in sortierter Reihenfolge.
  • Der Server verwendet die erste Zeile, die dem Hostnamen und dem Benutzernamen des Clients entspricht.

(...) Der Server verwendet Sortierregeln, die Zeilen mit den spezifischsten Host-Werten zuerst ..__ anordnen. Literal Host-Namen [wie 'localhost'] und IP-Adressen sind am spezifischsten.

Ein solcher anonymer Benutzer "maskiert" also jeden anderen Benutzer wie '[any_username]'@'%', wenn er sich von localhost aus verbindet.

'bill'@'localhost' stimmt mit 'bill'@'%' überein, würde jedoch vor (z. B.) ''@'localhost' vorHänden passen.

Die empfohlene Lösung besteht darin, diesen anonymen Benutzer fallen zu lassen (dies ist in der Regel eine gute Sache).


Nachfolgende Bearbeitungen sind für die Hauptfrage meist irrelevant. Diese Fragen sollen nur einige Fragen beantworten, die in anderen Kommentaren dieses Threads aufgeworfen wurden.

Edit 1

Authentifizierung als 'bill'@'%' über einen Socket.

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

 mysql> SELECT-Benutzer, Host FROM mysql.user; 
 + ------ + ----------- + 
 | Benutzer | Host | 
 + ------ + ----------- + 
 | Rechnung | % | 
 | Wurzel | 127.0.0.1 | 
 | Wurzel | :: 1 | 
 | Wurzel | localhost | 
 + ------ + ----------- + 
 4 Reihen im Satz (0,00 s) 

 mysql> SELECT USER (), CURRENT_USER (); 
 + ---------------- + ---------------- + 
 | USER () | CURRENT_USER () | 
 + ---------------- + ---------------- + 
 | bill @ localhost | rechnung @% | 
 + ---------------- + ---------------- + 
 1 Reihe im Satz (0,02 Sek.) 

 mysql> SHOW VARIABLES LIKE 'skip_networking'; 
 + ----------------- + ------- + 
 | Variablenname | Wert | 
 + ----------------- + ------- + 
 | überspringen | ON | 
 + ----------------- + ------- + 
 1 Reihe im Satz (0,00 s) 

Edit 2

Genau dieselbe Einstellung, mit der Ausnahme, dass ich das Netzwerk erneut aktiviert habe und jetzt einen anonymen Benutzer ''@'localhost' erstellt habe.

 root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql
 Willkommen beim MySQL-Monitor (...) 

 mysql> CREATE USER '' @ 'localhost' IDENTIFIED BY 'anotherpass'; 
 Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) 

 mysql> Tschüss 

 root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -pass\
 --socket =/tmp/mysql-5.5.sock 
 ERROR 1045 (28000): Zugriff für Benutzer "bill" @ "localhost" (mit Kennwort: YES) 
 root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -pass\
 -h127.0.0.1 --protocol = TCP 
 ERROR 1045 (28000): Zugriff für Benutzer "bill" @ "localhost" (mit Kennwort: YES) 
 root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -pass\
 -hlocalhost --protocol = TCP 
 FEHLER 1045 (28000): Zugriff für Benutzer 'bill' @ 'localhost' (mit Kennwort: YES) wurde verweigert 

Edit 3

Gleiche Situation wie in Bearbeitung 2, jetzt mit dem Kennwort des anonymen Benutzers.

 root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost 
 Willkommen beim MySQL-Monitor (...) 

 mysql> SELECT USER (), CURRENT_USER (); 
 + ---------------- + ---------------- + 
 | USER () | CURRENT_USER () | 
 + ---------------- + ---------------- + 
 | bill @ localhost | @localhost | 
 + ---------------- + ---------------- + 
 1 Reihe im Satz (0,01 Sek.) 

Fazit 1, aus edit 1: Man kann sich als 'bill'@'%'über einen Socket authentifizieren.

Schlussfolgerung 2, aus Edit 2: Ob eine Verbindung über TCP oder über einen Socket hergestellt wird, hat keine Auswirkungen auf den Authentifizierungsprozess (außer, dass Sie sich nicht wie jeder andere Benutzer als 'something'@'localhost' über einen Socket verbinden können, offensichtlich).

Schlussfolgerung 3, aus edit 3: Obwohl ich -ubill angegeben habe, wurde mir als anonymer Benutzer der Zugriff gewährt. Dies liegt an den oben genannten "Sortierregeln". Beachten Sie, dass in den meisten Standardinstallationen ein anonymer Benutzer ohne Kennwort vorhanden ist (und sollte gesichert/entfernt werden).

394
RandomSeed

Versuchen:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to [email protected] identified by 'pass' with grant option;
126
Edgar Aviles

Wenn du rennst 

mysql -u bill -p

und bekam diesen Fehler

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

mysqld erwartet, dass Sie sich als [email protected] verbinden

Versuchen Sie, [email protected] zu erstellen.

CREATE USER [email protected] IDENTIFIED BY 'passpass';
grant all privileges on *.* to [email protected] with grant option;

Wenn Sie eine Remote-Verbindung herstellen möchten, müssen Sie entweder den DNS-Namen, die öffentliche IP-Adresse oder 127.0.0.1 über TCP/IP angeben:

mysql -u bill -p [email protected]
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP

Sobald Sie sich angemeldet haben, führen Sie dies bitte aus

SELECT USER(),CURRENT_USER();

USER () gibt an, wie Sie sich in MySQL authentifiziert haben

CURRENT_USER () meldet, wie Sie sich in MySQL über die Tabelle mysql.user authentifizieren durften

Dadurch erhalten Sie einen besseren Überblick darüber, wie und warum Sie sich bei mysql anmelden dürfen. Warum ist diese Ansicht wichtig zu wissen? Dies hat mit dem Bestellprotokoll der Benutzerauthentifizierung zu tun.

Hier ein Beispiel: Ich werde auf meinem Desktop MySQL einen anonymen Benutzer erstellen 

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 [email protected]'%';
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 schau mich als anonymer Benutzer an:

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() |
+---------------+----------------+
| [email protected] | @%             |
+---------------+----------------+
1 row in set (0.00 sec)

mysql>

Die Authentifizierungsbestellung ist sehr streng. Es prüft vom Spezifischsten bis zum Kleinsten. Ich habe über diesen Authentifizierungsstil in DBA StackExchange geschrieben.

Vergessen Sie nicht, TCP explizit als Protokoll für den mysql-Client aufzurufen, wenn dies erforderlich ist.

64
RolandoMySQLDBA

Wenn Sie Ihr Passwort vergessen haben oder Ihr Passwort ändern möchten, können Sie die folgenden Schritte ausführen:

1: Stoppen Sie Ihre MySQL

[root @ maomao ~] # Dienst mysqld stop
MySQL stoppen: [OK]

2: Verwenden Sie "--skip-grant-tables", um mysql neu zu starten

[root @ mcy400 ~] # mysqld_safe --skip-grant-tables 
[root @ cy400 ~] # Starten des mysqld-Daemons mit Datenbanken aus/var/lib/mysql

3: Öffnet ein neues Fenster und gibt mysql -u root ein

[root @ cy400 ~] # mysql -u root 
Willkommen beim MySQL-Monitor. Befehle enden mit; oder\g.

4: Ändern Sie die Benutzerdatenbank

mysql> benutze mysql 
Lesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen Sie können diese Funktion ausschalten, um mit -A .__ einen schnelleren Start zu erreichen. Datenbank geändert

5: Ändern Sie Ihr Passwort. Ihr neues Passwort sollte in "()" eingegeben werden.

mysql> update user set password = Kennwort ('root123') wobei benutzer = 'root'; 
Abfrage OK, 3 Zeilen betroffen (0,00 Sek.) 
Übereinstimmende Zeilen: 3 geändert: 3 Warnungen: 0

6: spülen

mySQL> Flush-Berechtigungen;

7: aufhören

mysql> quit 
Tschüss

8: starte mysql neu

[root @ cy400 ~] # service mysqld restart; 
MySQL stoppen: [OK] 
MySQL starten: [OK]

Bingo! Sie können Ihre Datenbank mit Ihrem Benutzernamen und Ihrem neuen Passwort verbinden:

[[email protected] ~]# 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
14
Li Yingjun

Wenn Sie mysql -u root -p eingeben, stellen Sie über einen lokalen Unix-Socket eine Verbindung zum MySQL-Server her. 

Der von Ihnen gewährte Zuschuss 'bill'@'%' stimmt jedoch nur merkwürdig mit TCP/IP-Verbindungen überein.

Wenn Sie Zugriff auf den lokalen Unix-Socket gewähren möchten, müssen Sie Berechtigungen für "bill" @ "localhost" erteilen.

Sie können auch eine Verbindung über TCP/IP mit dem Befehlszeilenclient mysql herstellen, um die bereits erteilten Berechtigungen zu erfüllen, z. Führen Sie mysql -u root -p -h 192.168.1.123 oder die lokale IP-Adresse Ihrer Box aus.

14
nos

Ein verwandtes Problem in meinem Fall war der Verbindungsaufbau mit:

mysql -u mike -p mypass

Whitespace IS ist anscheinend zwischen -u # uname # erlaubt, aberNICHTzwischen -p und # password #

Daher benötigt:

mysql -u mike -pmypass

Andernfalls mit einem Leerzeichen zwischen -p mypass mysql wird 'mypass' als db name verwendet

14
mstram

Ersparen Sie sich MAJOR-Kopfschmerzen ... Ihr Problem könnte darin bestehen, dass Sie die Anführungszeichen um das Passwort verpassen. Zumindest war dies mein Fall, der mich drei Stunden lang umgangen hat.

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

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

Suchen Sie nach "Hier ist eine typische Benutzeroptionsdatei:" und sehen Sie sich das dort angegebene Beispiel an. Viel Glück und ich hoffe, jemandem ein wenig Zeit zu sparen.

13
mimoralea

Super spät dazu

Ich habe alle diese anderen Antworten ausprobiert und viele verschiedene Versionen von mysql -u root -p ausgeführt, aber nie einfach ausgeführt 


mysql -u root -p 

Und einfach [ENTER] für das Passwort drücken. 


Sobald ich das getan habe, hat es funktioniert. Hoffe das hilft jemandem. 

12
garrettmac

Die Lösung besteht darin, den anonymen (beliebigen) Benutzer zu löschen!

Das gleiche Problem hatte ich auch bei einem Server von jemand anderem. Normalerweise entscheide ich mich bei der Installation von MySQL nicht für die Erstellung eines anonymen Benutzers, daher war mir dies nicht aufgefallen. Anfangs habe ich mich als "root" -Nutzer angemeldet und ein paar "normale" Benutzer erstellt (dh Benutzer mit Berechtigungen nur für dbs mit ihrem Benutzernamen als Präfix), dann abgemeldet und dann den ersten normalen Benutzer überprüft. Ich konnte mich nicht anmelden. Weder über phpMyAdmin noch über Shell. Es stellt sich heraus, der Schuldige ist dieser "Any" Benutzer.

12
fevangelou

Die beste Lösung, die ich für mich gefunden habe, ist.

mein Benutzer ist ein Sonar, und wenn ich versuche, eine Verbindung zu meiner Datenbank von einer externen oder anderen Maschine herzustellen, erhalte ich einen Fehler als 

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

Da ich dies auch von einem anderen Rechner aus probiere und durch Jenkins Job meine URL für den Zugriff ist 

alm-lt-test.xyz.com

wenn Sie eine Remote-Verbindung herstellen möchten, können Sie diese auf verschiedene Arten angeben:

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

Um darauf mit URL zuzugreifen, müssen Sie lediglich die folgende Abfrage ausführen.

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';
5
Abhijeet Kamble

Okay, ich bin nicht sicher, aber wahrscheinlich ist dies meine.cnf-Datei im Installationsverzeichnis von mysql. Dies ist der Täter.

bind-address = 127.0.0.1
3
Ali

Ich wollte Ihnen nur einen ungewöhnlichen Umstand mitteilen, dass ich den gleichen Fehler erhalten habe. Vielleicht hilft dies jemandem in der Zukunft.

Ich hatte ein paar Basisansichten entwickelt, die am Entwicklungsstandort erstellt und auf den Produktionsstandort übertragen wurden. Später in dieser Woche habe ich ein PHP -Skript geändert, und plötzlich kam es zu Fehlern, bei denen Access für den Benutzer 'local-web-user' @ 'localhost' abgelehnt wurde. Da das Datenquellenobjekt nicht geändert wurde, konzentrierte ich mich auf den Datenbankbenutzer in MySQL. In der Zwischenzeit machte ich mir Sorgen, dass jemand meine Website gehackt hatte. Glücklicherweise schien der Rest der Website unverletzt zu sein.

Es stellte sich später heraus, dass die Ansichten der Schuldige waren. Unsere Objektübertragungen erfolgen mit einem anderen Benutzer (und einem entfernten Benutzer: admin @ ip-address) als dem lokalen Website-Benutzer. Die Ansichten wurden also mit 'admin' @ 'ip-address' als Definierer erstellt. Der Standardwert für die Erstellung der Ansicht ist SECURITY 

SQL SECURITY DEFINER

Wenn lokaler Webbenutzer versucht, die Ansicht zu verwenden, stolpert er über die fehlenden Berechtigungen des Definierers, die Tabellen zu verwenden. Sobald die Sicherheit geändert wurde: 

SQL SECURITY INVOKER

das Problem wurde gelöst. Das tatsächliche Problem war aufgrund der Fehlermeldung völlig anders als erwartet.

3
Erik

Es ist ein Unterschied zwischen:

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

und 

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

Prüfen Sie:

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
+---------------+----------------------------+

Der Befehl 

mysql -u bill -p

zugriff implizit auf "Rechnung" @ "localhost" und NICHT auf "Rechnung" @ "%".

Es gibt keine Berechtigungen für 'bill' @ 'localhost'.

sie erhalten den Fehler:

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

lösung des Problems:

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

grant all privileges on . to 'bill'@'localhost' with grant option;
3
Gerd

Dies passiert auch, wenn Ihr Passwort einige Sonderzeichen wie @, $ usw. enthält .. Um dies zu vermeiden, können Sie das Passwort in einfache Anführungszeichen setzen:

$ mysql -usomeuser -p'[email protected]$$w0Rd'

Oder verwenden Sie stattdessen kein Passwort während der Eingabe. Lassen Sie es leer und geben Sie es ein, wenn das Terminal fragt. Dies ist der empfohlene Weg.

$ 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>
3
Pranit More

Ich hatte ein ähnliches Problem - beim ersten Versuch, MySql als root einzugeben, wurde mir der Zugriff verweigert. Es stellte sich heraus, dass ich vergessen habe, den Sudo zu benutzen ... 

Wenn Sie also beim ersten Versuch von root einen Fehler machen, versuchen Sie Folgendes: 

Sudo mysql -u root -p 

und geben Sie dann Ihr Passwort ein. Das sollte funktionieren. 

2
David Refaeli

Debugging-Zusammenfassung

  • Überprüfen Sie den Tippfehler: Benutzername oder Passwort. 
  • Überprüfen Sie den Hostnamen und vergleichen Sie ihn mit dem Hostnamen der Tabelle mysql.user. 
  • Überprüfen Sie, ob der Benutzer existiert oder nicht. 
  • Prüfen Sie, ob der Host eine IP-Adresse oder einen Hostnamen enthält.

Es besteht eine große Chance, dass dieses Problem in Ihrer Arbeit möglicherweise mehrmals aufgetreten ist. Dieses Problem trat meistens auf, weil der Benutzername oder das Passwort falsch eingegeben wurden. Dies ist zwar einer der Gründe, aber es gibt noch viele andere Chancen für dieses Problem. Manchmal sieht es sehr ähnlich aus, aber wenn Sie tiefer graben, werden Sie mehrere Faktoren erkennen, die zu diesem Fehler beitragen. In diesem Beitrag werden die häufigsten Gründe detailliert beschrieben und um dieses Problem zu beheben. 

Mögliche Gründe:

  • Fall 1: Tippfehler: Benutzername oder Passwort.

Dies ist der häufigste Grund für diesen Fehler. Wenn Sie den Benutzernamen oder das Passwort falsch eingegeben haben, werden Sie diese Fehlermeldung erhalten.

Lösung:  

Die Lösung für diese Art von Fehler ist sehr einfach. Geben Sie einfach den korrekten Benutzernamen und das Passwort ein. Dieser Fehler wird behoben. Falls Sie das Passwort vergessen haben, können Sie den Benutzernamen/das Passwort zurücksetzen. Wenn Sie das Passwort für das Konto admin/root vergessen, gibt es viele Möglichkeiten, das root-Passwort zurückzusetzen/neu zu erfassen. Ich werde einen weiteren Beitrag zum Zurücksetzen des Root-Passworts veröffentlichen, falls Sie das Root-Passwort vergessen.

  • Fall 2: Zugriff von einem falschen Host.

MySQL bietet eine Host-basierte Einschränkung für den Benutzerzugriff als Sicherheitsfunktionen. In unserer Produktionsumgebung haben wir die Zugriffsanfrage nur auf die Anwendungsserver beschränkt. Diese Funktion ist in vielen Produktionsszenarien sehr hilfreich. 

Lösung:

Wenn Sie mit dieser Art von Problem konfrontiert sind, überprüfen Sie zunächst, ob Ihr Host zulässig ist oder nicht. Überprüfen Sie dazu die Tabelle mysql.user. Wenn dies nicht definiert ist, können Sie einen neuen Datensatz in die Tabelle mysql.user aktualisieren oder einfügen Im Allgemeinen ist der Zugriff als Rootbenutzer von einem Remotecomputer aus deaktiviert. Dies ist aus Sicherheitsgründen nicht empfehlenswert. Wenn Sie Anforderungen für den Zugriff von mehreren Computern auf Ihren Server haben, geben Sie nur Zugriff auf diese Computer. Es ist besser, keine Platzhalterzeichen (%) zu verwenden und universellen Zugriff zu gewähren. __ Lassen Sie mich die mysql.user-Tabelle aktualisieren, jetzt kann der Demouser von jedem Host auf den MySQL-Server zugreifen.

  • Fall 3: Benutzer existiert nicht auf dem Server.

Diese Art von Fehler tritt auf, wenn der Benutzer, auf den Sie zugreifen möchten, auf dem MySQL-Server nicht vorhanden ist.

Lösungen:

Wenn Sie mit diesem Problem konfrontiert sind, überprüfen Sie einfach, ob der Benutzer in der Tabelle mysql.user vorhanden ist oder nicht. Wenn der Datensatz nicht vorhanden ist, kann der Benutzer nicht zugreifen. Wenn für diesen Benutzer ein Zugriff erforderlich ist, erstellen Sie einen neuen Benutzer mit diesem Benutzernamen.

  • Fall 4: Mischung aus numerischen und namenbasierten Hosts.

Wichtige Punkte

  • Es ist nicht ratsam, beim Definieren des Benutzerhost Platzhalterzeichen zu verwenden. Versuchen Sie, den genauen Hostnamen zu verwenden.

  • Deaktivieren Sie das Root-Login vom Remote-Computer aus.

  • Verwenden Sie ein Proxy-Benutzerkonzept.

Es gibt einige andere Konzepte, die sich auf dieses Thema beziehen, und es ist sehr unterschiedlich in diesem Artikel. In den kommenden Artikeln werden wir uns mit den folgenden verwandten Themen beschäftigen.

  • Was ist zu tun, wenn Sie das root-Passwort auf dem MySQL-Server vergessen haben.
  • Probleme mit MySQL-Zugriffsprivilegien und benutzerbezogene Tabellen.
  • MySQL-Sicherheitsfunktionen mit Best Practices.

Ich hoffe, dieser Beitrag wird Ihnen helfen, den MySQL-Fehlercode 1045 zu beheben, der für Benutzer in MySQL abgelehnt wurde.

2
Abhijit Jagtap

Für mich wurde dieses Problem durch eine neue Funktion von MySQL 5.7.2 verursacht: user-Einträge sind ignored, wenn ihr plugin-Feld leer ist.

Stellen Sie es auf z. mysql_native_password, um sie wieder zu aktivieren:

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

Siehe die Versionshinweise für MySQL 5.7.2 unter «Authentication Notes».

Aus irgendeinem Grund (möglicherweise weil meine Kennwort-Hashes vor Version 4.1 entfernt wurden) hat das Skript mysql_upgrade keinen Standardwert für das Plugin festgelegt.

Ich fand es heraus, als ich die folgende Warnmeldung in /var/log/mysql/error.log feststellte:

[Warnung] Der Benutzereintrag 'foo' @ '%' enthält einen leeren Plugin-Wert. Der Benutzer wird ignoriert und niemand kann sich mit diesem Benutzer mehr anmelden.

Ich poste diese Antwort hier, um vielleicht jemanden davor zu bewahren, die gleiche lächerliche Zeit dafür zu verwenden wie ich.

2
maxelost

Nicht sicher, ob jemand anderes dies hilfreich finden wird, aber ich habe den gleichen Fehler gefunden und überall nach anonymen Benutzern gesucht ... und es gab keine. Das Problem bestand schließlich darin, dass das Benutzerkonto auf "Require SSL" (SSL erforderlich) gesetzt war. Dies fand ich in PHPMyAdmin, indem ich zu Benutzerkonten ging und auf "Berechtigungen bearbeiten" für den Benutzer klicke. Sobald ich diese Option deaktiviert hatte, funktionierte alles wie erwartet!

2
Alan

Ich entdeckte einen weiteren Fall, der auf der Oberfläche als Randfall erscheint. Ich kann über SELECT INTO .. ​​OUTFILE als root in das Dateisystem exportieren, aber nicht als normaler Benutzer. Obwohl dies eine Frage von Berechtigungen sein kann, habe ich mir das angesehen und nichts besonders offensichtliches gesehen. Ich kann nur sagen, dass die Ausführung der Abfrage als normaler Benutzer, der über alle Berechtigungen für die betreffende Datenbank verfügt, den Zugriff mit verweigertem Zugriff zurückgibt, der zu diesem Thema führte. Als ich in einem alten Projekt die Abschrift einer erfolgreichen Verwendung von SELECT INTO… OUTFILE fand, fiel mir auf, dass ich als root angemeldet war. Sicher, als ich mich als root anmeldete, lief die Abfrage wie erwartet.

2
David A. Gray

Ich hoffe, Sie haben nicht mehr Schaden angerichtet, indem Sie auch den debian-sys-maint-Benutzer in mysql gelöscht haben 

Lassen Sie Ihren mysql-Daemon normal laufen. Starten Sie Ihren MySQL-Client wie unten gezeigt

mysql -u debian-sys-maint -p

In einem anderen Terminal cat die Datei /etc/mysql/debian.cnf. Diese Datei enthält ein Passwort. Fügen Sie dieses Kennwort ein, wenn Sie dazu aufgefordert werden.

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

2
ysk

Unter Windows: So beheben Sie Fehler 1045 (28000): Zugriff für Benutzer 'root' @ 'localhost' verweigert (Kennwort verwenden: NEIN)

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

Das mag für sehr wenige Leute gelten, aber hier ist es. Verwenden Sie keine Exaklamation (!) In Ihrem Passwort. Ich habe den oben genannten Fehler mit MariaDB gemacht. Als ich es auf Zahlen und Buchstaben vereinfachte, funktionierte es. Andere Zeichen wie @ und $ funktionieren gut - Ich habe diese Zeichen in einem anderen Benutzer in derselben Instanz verwendet. Die fünfte Antwort an dieser Adresse führte mich zu meinem Fix.

0
Chiwda

OS: Windows 

Meine Fehlermeldung lautet: "MySQL ERROR 1045 (28000): Zugriff für Benutzer 'root' @ 'localhost' (mit Kennwort: YES) verweigert"

Mein grund ist nicht offen cmd mit administrator permission 

also meine lösung: cmd mit administrator permission öffnen, dann klappt es.

0
yilin

Wenn Sie mysql -u bill -p ausführen, wird localhost in Ihre IP aufgelöst, da es sich um 127.0.0.1 handelt und in Ihrer /etc/hosts -Datei standardmäßig 127.0.0.1 localhost vorhanden ist. Mysql interpretiert Sie also als [email protected], was mit [email protected]'%' nicht gewährt wird. Aus diesem Grund gibt es 2 verschiedene Datensätze für den Benutzer root als Ergebnis der Abfrage select Host, user from mysql.user;.

Es gibt zwei Möglichkeiten, um dieses Problem zu beheben.

Eine ist die Angabe einer IP-Adresse, die nicht durch die /etc/hosts -Datei umgekehrt aufgelöst wird, wenn Sie versuchen, sich anzumelden. Beispielsweise lautet die IP des Servers 10.0.0.2. Wenn Sie den Befehl mysql -u bill -p -h 10.0.0.2 ausführen, können Sie sich anmelden. Wenn Sie select user(); eingeben, erhalten Sie [email protected]. Natürlich sollte kein Domainname in diese IP in Ihrer /etc/hosts -Datei aufgelöst werden.

Zweitens müssen Sie den Zugriff für diesen bestimmten Domainnamen gewähren. Für [email protected] sollten Sie den Befehl grant all privileges on *.* to [email protected] identified by 'billpass'; aufrufen. In diesem Fall können Sie sich mit dem Befehl mysql -u bill -p anmelden. Nach der Anmeldung gibt der Befehl select user();[email protected] zurück.

Dies ist jedoch nur für den Fall, dass Sie versuchen, einen MySQL-Server auf demselben Host anzumelden. Bei Remote-Hosts verhält sich mysql erwartungsgemäß. Mit '%' können Sie sich anmelden.

0
Shnkc

Ich bin auf den gleichen Fehler gestoßen. Das Setup funktionierte nicht wie folgt:

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

Das bearbeitete Setup unten ist das, bei dem es funktioniert. Beachten Sie den Unterschied

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

Der Unterschied besteht in den doppelten Anführungszeichen. Sie scheinen in PHP im Gegensatz zu Java ziemlich bedeutsam zu sein, und sie wirken sich darauf aus, Zeichen zu umgehen, URLs einzurichten und Parameter an eine Funktion zu übergeben. Sie sind hübscher (ich weiß), verwenden jedoch immer möglichst einfache Anführungszeichen, dann können doppelte Anführungszeichen in diese eingebettet werden. 

Dieser Fehler trat auf, als ich meine Anwendung auf einer Linux-Box im Gegensatz zu einer Windows-Umgebung testete.

0
Raymond Wachaga

Dies kann auch passieren, wenn MySQL auf einem Betriebssystem ohne Berücksichtigung der Groß- und Kleinschreibung * wie Windows ausgeführt wird.

z.B. Der Versuch, mit diesen Anmeldeinformationen eine Verbindung zur Datenbank herzustellen, ist fehlgeschlagen:

mysql> grant select on databaseV105. * to 'specialuser' identifiziert durch 's3curepa5wrd';

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

FEHLER 1045 (28000): Zugriff für Benutzer 'specialuser'@'10.0.1.113' verweigert (mit Passwort: JA)

aber das gelang:

mysql> grant select on databasev105. * to 'specialuser' identifiziert mit 's3curepa5wrd';

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

Passwort eingeben:

0
kguest

Ich löste dies, indem ich die alten fehlerhaften Einträge des Rechners löschte (dies ist der wichtige Teil: beide aus mysql.user und mysql.db ) und dann den gleichen Benutzer wie vorher sad erstellt:

FLUSH PRIVILEGES;
CREATE USER [email protected] IDENTIFIED BY 'passpass';
grant all privileges on *.* to [email protected] with grant option;
FLUSH PRIVILEGES;

Arbeitet, der Benutzer verbindet sich. Jetzt entferne ich einige Vorwahlen davon :)

0
dxvargas