Ich kann mich nicht mit dem erstellten Benutzer in MySQL anmelden


76

Mit diesem Befehl

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';

Ich versuche mich anzumelden mit:

 mysql -u brian -ppassword

Der Fehler ist:

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

Ich mache dies als root und habe versucht, Berechtigungen zu löschen.

Ich habe dies mit unzähligen Benutzern versucht, aber es scheint nicht zu funktionieren. Ich kann einen Benutzer ohne Passwort erstellen und die Anmeldung funktioniert. Kommandozeile und von phpmyadmin

Überprüfen Sie auch, ob sich der Benutzer in mysql.user befand.

Showstipendien für Brian Shows:

| GRANT ALL PRIVILEGES ON *.* TO 'brian'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |

Hmm ... was bedeutet SHOW GRANTS FOR brian@ %; Rückkehr?
Powerlord

Antworten:


186

Sie haben wahrscheinlich dieses fortwährende MySQL-Problem, bei dem sich einer der Standardbenutzer in der Benutzertabelle befindet '' @ localhost, wodurch alle localhostBenutzer später in der Tabelle abgelehnt werden. Was ich tun würde, ist mysqldumpdie mysqlDatenbank und suche nach diesem Eintrag in der UserTabelle; Wenn gefunden, löschen Sie es und löschen Sie die Berechtigungen.

Weitere Informationen finden Sie unter https://dev.mysql.com/doc/refman/5.5/en/connection-access.html .

Es ist ein weit verbreitetes Missverständnis zu glauben, dass für einen bestimmten Benutzernamen alle Zeilen, die diesen Benutzer explizit benennen, zuerst verwendet werden, wenn der Server versucht, eine Übereinstimmung für die Verbindung zu finden. Das ist nicht wahr. Das vorstehende Beispiel veranschaulicht dies, wenn eine Verbindung von h1.example.net durch jeffrey zuerst nicht mit der Zeile übereinstimmt, die 'jeffrey' als Benutzerspaltenwert enthält, sondern mit der Zeile ohne Benutzernamen. Infolgedessen wird Jeffrey als anonymer Benutzer authentifiziert, obwohl er beim Herstellen einer Verbindung einen Benutzernamen angegeben hat.


1
Ich habe das tatsächlich. Gibt es einen besseren Weg, ohne meine Produktion zu beeinträchtigen?
Brian G

Nun, Sie könnten Ihre neu erstellten Einträge davor verschieben, wenn Sie sie nicht loswerden möchten, denke ich. Aber solange es da ist, wird es dies weiterhin neuen Benutzern antun. Wenn Sie sich Sorgen machen, es loszuwerden, sollten Sie sich wahrscheinlich in den MySQL-Dokumenten umsehen, warum es dort ist. Ich bin mir sicher, dass es dafür einen seltsamen Grund gibt, aber ich kann mich momentan nicht erinnern.
Chaos

Weitere Informationen dazu. Ich bin fast sicher, dass dies mein Problem ist. aber ich kann keine weiteren Informationen dazu finden.
Brian G

dev.mysql.com/doc/refman/5.1/de/default-privileges.html hat etwas über die 'anonymen Konten', die diese Konten mit leerem Benutzernamen anscheinend sein sollen. Nichts dort scheint darauf hinzudeuten, dass es einen Nachteil gibt, sie zu entfernen.
Chaos

4
Wenn Sie mysql auf einem Debian-System wie verwenden, können Sie dieses Problem am besten lösen, indem Sie mysql_secure_installation ausführen (Root-Rechte erforderlich).
BigBlast

46

Dies ist ein Problem, das von anonymen Benutzern verursacht wird. Sobald ich MySQL installiert habe, laufe ich immer

shell> mysql_secure_installation 

und wählen Sie, ob Sie das Root-Passwort festlegen / ändern, anonyme Benutzer entfernen, die Remote-Root-Anmeldung nicht zulassen und die Testdatenbank entfernen möchten. Dadurch wird der anonyme Benutzer entfernt und Ihre Installation gesichert. Es sollte auch das Problem lösen, das Sie haben.


Wenn Sie der Meinung sind, dass dies wirklich die richtige Antwort ist, zumindest für alles andere als vollständige Demo-Datenbanken. In gewisser Weise scheint MySQL sinnvoll zu sein, indem Benutzeranmeldungen vorher verhindert werden (und anonyme Benutzer entfernt werden), da es eine große rote Fahne ist, dass eine Installation unsicher ist.
Phil

22
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

1
Das hat auch bei mir funktioniert, aber können Sie die Logik erklären?
Blackirishman

2
@blackirishman Berechtigungsänderungen werden erst wirksam, wenn Sie die alten Berechtigungen löschen und die neuen installiert werden. Ich bin sicher, dass dies automatisch auf phpmyadmin erfolgen würde. Das hat auch bei mir funktioniert! Vielen Dank.
Logicbloke

17

Keine der hier angebotenen Lösungen hat funktioniert. Nach vielen Fehlern und Versuchen stellte ich fest, dass das Passwort Sonderzeichen enthielt. Das Ändern des Passworts ohne Sonderzeichen löste das Problem


Ich musste die Sonderzeichen nicht entfernen, sondern musste nur die Option -p verwenden, um mich zur Eingabe des Passworts aufzufordern.
ccjjmartin

1
Das war es für mich. Ich denke, das Problem war, dass beim Festlegen des Kennworts das darin enthaltene Zeichen '\' nicht wörtlich interpretiert wurde, aber als ich versuchte, mich mit dem neuen Benutzer anzumelden, war dies der Fall.
jfla

Irgendwelche / alle / einige der folgenden Charaktere waren Schuldige &? ^ \
AnkitK

1
Ich habe Leerzeichen herausgefunden und die folgenden Zeichen sollten vermieden werden "" $, [] *? {} ~ #% \ <> | ^;
Mehdi Nellen

Ich habe ewig gebraucht, um das zu realisieren. Ich habe einen Online-Zufallspasswortgenerator verwendet, um das Passwort zu finden, das eines dieser Sonderzeichen enthält.
BadHorsie

5

In den MySQL-Dokumenten heißt es: (von http://dev.mysql.com/doc/refman/5.1/en/adding-users.html ):

Zwei der Konten haben einen Benutzernamen montyund ein Passwort von some_pass. Beide Konten sind Superuser-Konten mit allen Berechtigungen, etwas zu tun. Das 'monty'@'localhost'Konto kann nur verwendet werden, wenn eine Verbindung vom lokalen Host hergestellt wird. Das 'monty'@'%'Konto verwendet den '%'Platzhalter für den Host-Teil, sodass eine Verbindung von jedem Host aus hergestellt werden kann.

Es ist erforderlich, beide Konten zu haben monty, um von überall aus eine Verbindung herstellen zu können monty. Ohne das localhost-Konto hat das von anonyme Benutzerkonto für localhost, das von erstellt wird mysql_install_db, Vorrang, wenn monty eine Verbindung vom lokalen Host herstellt. Infolgedessen montywürde als anonymer Benutzer behandelt. Der Grund dafür ist, dass das Konto für anonyme Benutzer einen spezifischeren HostSpaltenwert als das 'monty'@'%'Konto hat und daher früher in der Sortierreihenfolge der Benutzertabelle steht.

In diesem Sinne würde ich empfehlen, einen 'brian'@'localhost'Benutzer mit denselben Berechtigungen zu erstellen .


1
<Sarkasmus> Was für eine schöne Designentscheidung! </ Sarkasmus>
Jweyrich

2

Sie haben die Zitate um Brian in Ihrer Finanzhilfeerklärung vergessen. Versuchen Sie es so:

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';


2

Ich denke 'Russell Silva' ist richtig ...

Ich habe einen Benutzer von erstellt

CREATE USER 'username'@'%' PASSWORD='userpassword';

Aber ich kann mich nicht in diesem Konto anmelden. Die Konsole hat mir das gesagt

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

Also habe ich einen Benutzer mit demselben Benutzernamen erstellt, außer dass '%' in 'localhost' geändert wurde, und ich konnte mich schließlich als 'Benutzername' anmelden. Es ist allerdings ziemlich komisch für mich.


1

In meinem Fall war es darauf zurückzuführen, dass ich auf "SSL: SSL ERFORDERN" geklickt habe (in phpmyadmin). Als ich es in "REQUIRE NONE" änderte, konnte ich mich anmelden.


Dies hat es für mich mit phpmyadmin 4.5.4.1deb2ubuntu2 behoben. Prost! Ich hatte dieses Problem noch nie mit früheren phpmyadmin-Versionen, die ich kenne.
10us

1

Wechseln Sie mit diesem Befehl zum nativen Passwort:

ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';

0

Sie können auch eine Verbindung von einem anderen Host aus herstellen. Anschließend wird der anonyme Benutzer localhost umgangen und Sie können ihn entfernen und Berechtigungen löschen:

mysql -u brian -ppassword -h 'other_host_than_localhost'

0

Ich hatte ein ähnliches Problem beim Versuch, nach dem Upgrade auf 17.04 eine Verbindung zu einer Maria-Datenbank herzustellen, die unter Ubuntu ausgeführt wird.

Standardmäßig wurde nur localhost 127.0.0.1 abgehört.

Damit MySQL / Maria alle verfügbaren Ports und Schnittstellen abhört, musste ich die Bindungsadresse = 0.0.0.0 explizit angeben. Ich habe diese Zeile am Ende der Datei hinzugefügt /etc/mysql/my.cnf, dh

...
[client-server]

# Import all .cnf files from configuration directory

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
bind-address=0.0.0.0

Dann...

sudo /etc/init.d/mysql restart 

-1

Ein ähnliches Problem trat bei mir auf, auch nachdem ich überprüft hatte, dass ich kein falsches Passwort eingegeben habe. Ich konnte mich nicht anmelden. Die folgenden zwei Schritte haben mein Problem gelöst.

  1. Testdatenbank löschen
  2. Anonymen Benutzer löschen

Dropping test databaseSie hätten den ganzen PC
Sebas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.