MySQL - ERROR 1045 (28000): Zugriff für Benutzer verweigert

9

Ich habe gerade eine neue Kopie von Ubuntu 10.04.2 LTS auf einem neuen Computer installiert. Ich habe mich als root bei MySQL angemeldet:

david@server1:~$ mysql -u root -p123

Ich habe einen neuen Benutzer namens repl erstellt. Ich habe den Host leer gelassen, damit der neue Benutzer von jedem Ort aus darauf zugreifen kann.

mysql> CREATE USER 'repl' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

Ich habe die Benutzertabelle überprüft, um sicherzustellen, dass die neue Benutzerrepl. Ordnungsgemäß erstellt wurde.

mysql> select host, user, password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| server1   | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 127.0.0.1 | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| ::1       | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| localhost |                  |                                           |
| server1   |                  |                                           |
| localhost | debian-sys-maint | *27F00A6BAAE5070BCEF92DF91805028725C30188 |
| %         | repl             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-----------+------------------+-------------------------------------------+
8 rows in set (0.00 sec)

Ich beende dann, versuche mich als Benutzerreplikation anzumelden, aber der Zugriff wird verweigert.

david@server1:~$ mysql -u repl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ mysql -urepl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ 

Warum wird der Zugriff verweigert?

davidjhp
quelle
Ich habe gerade versucht, den Benutzer zu löschen und mit dem Host localhost zu erstellen, und das hat funktioniert. CREATE USER 'repl' @ 'localhost' IDENTIFIED BY '123'; Aber ich möchte den Benutzer nicht auf einen Host beschränken, ich würde lieber einen Host haben.
Davidjhp

Antworten:

5

Der Grund, warum Sie sich nicht anmelden konnten, hängt repl@'%'mit dem Benutzerauthentifizierungsprotokoll von MySQL zusammen . Es werden keine Benutzermuster behandelt, wie man glauben würde.

Sehen Sie sich an, wie Sie versucht haben, sich anzumelden

mysql -u repl -p123

Da Sie keine IP-Adresse angegeben haben, geht mysql davon aus, dass der Host localhost ist, und versucht, eine Verbindung über die Socket-Datei herzustellen. Aus diesem Grund wird in der Fehlermeldung angezeigt Access denied for user 'repl'@'localhost' (using password: YES).

Man würde denken, repl@'%'würde erlauben repl@localhost. Je nachdem, wie MySQL die Benutzerauthentifizierung durchführt , wird dies einfach nie passieren. Würde das helfen?

mysql -u repl -p123 -h127.0.0.1

Ob Sie es glauben oder nicht, MySQL würde es repl@localhosterneut versuchen . Warum? Der MySQL-Client sieht 127.0.0.1die Socket-Datei und versucht es erneut.

Versuchen Sie es so:

mysql -u repl -p123 -h127.0.0.1 --protocol=tcp

Dies würde den MySQL-Client zwingen, das TCP / IP-Protokoll explizit zu verwenden. Es hätte dann keine andere Wahl als dem Benutzer repl@'%'.

RolandoMySQLDBA
quelle
4

Sie sollten für localhost spezifisch dafür ausgeben.

  GRANT USAGE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123';

Und versuchen Sie es mit einer Verbindung.

Mannoj
quelle
1

Das Problem sind diese beiden Konten, die standardmäßig hinzugefügt werden.

http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html

+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost |                  |                                           |
| server1   |                  |                                           |
+-----------+------------------+-------------------------------------------+

Ein leerer Benutzername ist ein Platzhalter. Unabhängig davon, welches Konto Sie verwenden, entspricht er diesem Benutzer, wenn MySQL glaubt, dass Sie eine Verbindung von localhost oder Ihrem lokalen Servernamen (in diesem Fall server1) herstellen ... da er kein Kennwort hat Passwort, das Sie versuchen, ist falsch. Die Benutzerauthentifizierung versucht nur die erste Übereinstimmung, sodass der von Ihnen erstellte Benutzer nie bemerkt wird, wenn Ihr Host localhost (oder Ihr Servername) ist.

Löschen Sie diese beiden aus dem mysql. userTisch und dann FLUSH PRIVILEGES;.

Oder das Skript mysql_secure_installation kann dies für Sie tun, obwohl ich es vorziehen würde, Dinge manuell zu erledigen.

http://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

Michael - sqlbot
quelle
0

Stellen Sie sicher, dass alle Felder im Connector mit den richtigen Details eingerichtet sind

host = "localhost", user = "CorrectUser", passwd = "coRrectPasswd", database = "CorreCTDB"

Überprüfen Sie auch, ob Fehler in Groß- und Kleinbuchstaben vorliegen. 1045 ist kein Syntaxfehler, hat jedoch mit falschen Angaben im Connector zu tun

Johan Swan
quelle
0

Die Datenbank ist möglicherweise noch nicht konfiguriert. Geben Sie lediglich einen Aufruf ohne Argumente aus:

mysql <enter>

Server version: xxx

Copyright (c) xxx

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Mysql [(none)]> 

Wenn für MySQL ein Root-Passwort festgelegt werden muss, können Sie verwenden

mysql_secure_installation
TRicks43
quelle
-2

Dies könnte ein Problem mit der Beschädigung Ihrer MySQL-Datenbank sein. Tabellen in der MySQL-Datenbank wie Benutzertabellen können beschädigt werden und zu Problemen führen.

Bitte überprüfen Sie diese

myisamchk / var / lib / mysql / mysql / * .MYI

Normalerweise möchten wir beim Überprüfen oder Reparieren von Myisam-Tabellen zuerst MySQL herunterfahren. Wenn dieses Problem immer noch nicht gelöst werden kann, probieren Sie es bitte ebenfalls aus.

Wenn sie beschädigt sind, können Sie sie mithilfe von beheben

myisamchk --silent --force --fast /path/table-name.MYI

Vielen Dank,

Masood

Masood Alam
quelle