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?
Antworten:
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
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 erlaubenrepl@localhost
. Je nachdem, wie MySQL die Benutzerauthentifizierung durchführt , wird dies einfach nie passieren. Würde das helfen?Ob Sie es glauben oder nicht, MySQL würde es
repl@localhost
erneut versuchen . Warum? Der MySQL-Client sieht127.0.0.1
die Socket-Datei und versucht es erneut.Versuchen Sie es so:
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@'%'
.quelle
Sie sollten für localhost spezifisch dafür ausgeben.
Und versuchen Sie es mit einer Verbindung.
quelle
Das Problem sind diese beiden Konten, die standardmäßig hinzugefügt werden.
http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html
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
.user
Tisch und dannFLUSH 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
quelle
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
quelle
Die Datenbank ist möglicherweise noch nicht konfiguriert. Geben Sie lediglich einen Aufruf ohne Argumente aus:
Wenn für MySQL ein Root-Passwort festgelegt werden muss, können Sie verwenden
quelle
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
quelle