Remote-MySQL-Verbindung aktivieren: FEHLER 1045 (28000): Zugriff für Benutzer verweigert

136

MySQL 5.1.31 unter Windows XP.

Vom lokalen MySQL-Server (192.168.233.142) kann ich wie folgt eine Verbindung als Root herstellen:

>mysql --host=192.168.233.142 --user=root --password=redacted

Auf einem Remotecomputer (192.168.233.163) kann ich sehen, dass der MySQL-Port geöffnet ist:

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

Wenn ich jedoch versuche, vom Remote- Computer aus eine Verbindung zu MySQL herzustellen , erhalte ich Folgendes:

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

Ich habe nur 2 Einträge in mysql.user:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

Was muss ich noch tun, um den Remotezugriff zu aktivieren?

BEARBEITEN

Wie von Paulo unten vorgeschlagen, habe ich versucht, den Eintrag mysql.user für% durch einen IP-spezifischen Eintrag zu ersetzen, sodass meine Benutzertabelle jetzt folgendermaßen aussieht:

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

Ich habe dann den Computer neu gestartet, aber das Problem besteht weiterhin.

Mike Chamberlain
quelle

Antworten:

211

Sie müssen dies als root setzen:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;;

Dabei ist IP die IP, die Sie zulassen möchten, USERNAME der Benutzer, mit dem Sie eine Verbindung herstellen, und PASSWORD das relevante Kennwort.

Wenn Sie den Zugriff von einer beliebigen IP aus zulassen möchten, geben Sie einfach ein % anstelle Ihrer IP-Adresse ein

und dann muss man nur noch setzen

FLUSH PRIVILEGES;

Oder starten Sie den MySQL-Server neu und fertig.

Octavio
quelle
Gibt es eine Möglichkeit, dies ohne einen lokalen MySQL-Client zu tun?
cmcginty
Wie entferne ich die Berechtigungen einer bestimmten IP?
Umair Ayub
4
stackoverflow.com/a/21151255/470749 hat mir auch geholfen, weil ich denke, dass meine Einstellung für die Bindungsadresse auskommentiert werden musste. Das Gewähren von Remote-Berechtigungen reichte nicht aus, um es zum Laufen zu bringen.
Ryan
8
In der Antwort nicht erklärt, aber durch PASSWORDdas Kontopasswort ersetzen . Ich habe versucht , die nur über Wechsel USERNAMEund IPes nicht für mich arbeiten , bis ich geändert PASSWORD.
Richard Parnaby-King
Befolgen Sie anschließend auch die Anweisungen
budhajeewa
85

Ich habe den gleichen Fehler erhalten, nachdem ich den Remotezugriff gewährt habe, bis ich Folgendes gemacht habe:

Von /etc/mysql/my.cnf

In neueren Versionen von MySQL ist der Speicherort der Datei /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(kommentieren Sie diese Zeile: bind-address = 127.0.0.1)

Dann renne service mysql restart.

Jungs
quelle
6
Oder ändern Sie es in Bindungsadresse = 0.0.0.0
lolski
2
Nur das Auskommentieren bind-addresshat bei mir nicht funktioniert. Entweder bind-address = 0.0.0.0oder bind-address = <server_ip>funktioniert.
Chhantyal
58

Standardmäßig ist der Remotezugriff auf dem MySQL-Server deaktiviert. Der Prozess zum Bereitstellen eines Remotezugriffs für den Benutzer ist.

  1. Gehen Sie zu meinem SQL Bin-Ordner oder fügen Sie ihn hinzu PATH
  2. Melden Sie sich bei root an mysql -uroot -proot(oder wie auch immer das root-Passwort lautet).
  3. Auf Erfolg werden Sie bekommen mysql>
  4. Gewähren Sie diesem Benutzer Zugriff auf alle.

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

Hier ist IP die IP-Adresse, für die Sie den Remotezugriff zulassen möchten, wenn wir dies angeben % eine IP-Adresse angeben, auf die remote zugegriffen werden kann.

Beispiel:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

Dies für einen anderen Benutzer.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Hoffe das wird helfen

Ravi Kant
quelle
+1 für Ausgezeichnete Details, es hat mir wirklich geholfen zu sehen, dass dies 0 rows affecteddie Norm ist :) Auch service mysqld restartwird am Ende empfohlen. [ mysqldist manchmal nur mysql]
Nathan Dortman
#Hinweis: Verwenden Sie für die Version 5.6+ "Grant all on ..." (ohne die Berechtigungen)
Nicke Manarin
21

Paulos Hilfe führte mich zur Lösung. Es war eine Kombination der folgenden:

  • Das Passwort enthielt ein Dollarzeichen
  • Ich habe versucht, eine Verbindung über eine Linux-Shell herzustellen

Die Bash-Shell behandelt das Dollarzeichen als Sonderzeichen für die Erweiterung auf eine Umgebungsvariable. Daher müssen wir es mit einem Backslash umgehen. Übrigens müssen wir dies nicht tun, wenn das Dollarzeichen das letzte Zeichen des Passworts ist.

Wenn Ihr Passwort beispielsweise "pas $ word" lautet, müssen wir von Linux bash aus wie folgt eine Verbindung herstellen:

# mysql --host=192.168.233.142 --user=root --password=pas\$word
Mike Chamberlain
quelle
4
Zusätzlich zu den oben genannten überprüfen Sie bitte /etc/mysql/my.cnf und Kommentar bind-address = 127.0.0.1
Buminda
2
Alternativ kann man einfache Anführungszeichen verwenden, um die Erweiterung des $: mysql --host=192.168.233.142 --user=root --password='pas$word' stackoverflow.com/a/6697781/500942
jalanb
'$' im Passwort. Unbezahlbar. Danke vielmals !!
Nagendra Kakarla
Nachdem ich meinen Kopf eine Weile gegen den Monitor geschlagen hatte, stieß ich darauf und es funktionierte. Ich hatte ein ! und @ in meinem Passwort. Geändertes Passwort, Berechtigungen gelöscht und ich bin wieder dabei. Vielen Dank!
AJM
9

Haben Sie eine Firewall? Stellen Sie sicher, dass Port 3306 geöffnet ist.

Unter Windows wird standardmäßig ein MySQL-Root-Konto erstellt, auf das nur von localhost aus zugegriffen werden darf, es sei denn, Sie haben die Option ausgewählt, den Zugriff von Remotecomputern während der Installation zu aktivieren.

Erstellen oder Aktualisieren des gewünschten Benutzers mit '%' als Hostname.

Beispiel:

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';
Vamsi Krishna B.
quelle
6
Der Server antwortet mit "ERROR 1045 (28000): Zugriff verweigert für" ... wenn ein Firewall-Block eine Zeitüberschreitung bekommt ...
Paulo H.
wollte nur zuerst posten. mein schlechtes
Vamsi Krishna B
@Krish - Alles, was Sie vorgeschlagen haben, ist bereits in der Frage behandelt
Mike Chamberlain
5
  1. Versuchen Sie es flush privilegeserneut.

  2. Versuchen Sie, den Server neu zu starten, um die Zuschüsse neu zu laden.

  3. Versuchen Sie, einen Benutzer mit dem Host "192.168.233.163" zu erstellen. "%" scheint nicht alle zuzulassen (es ist komisch)

Paulo H.
quelle
Danke, das habe ich versucht, aber ohne Erfolg. Ich habe die Frage mit Ihren Vorschlägen aktualisiert.
Mike Chamberlain
4
Versuchen Sie, einen anderen Benutzer zu erstellen, und vergessen Sie nicht, alle Zuschüsse festzulegen:CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
Paulo H.
4

In meinem Fall habe ich versucht, eine Verbindung zu einem Remote-MySQL-Server unter Cent OS herzustellen. Nach vielen Lösungen (Gewähren aller Berechtigungen, Entfernen von IP-Bindungen, Aktivieren des Netzwerks) wurde das Problem immer noch nicht gelöst.

Wie sich herausstellte, stieß ich bei der Suche nach verschiedenen Lösungen auf iptables, wodurch mir klar wurde, dass der MySQL-Port 3306 keine Verbindungen akzeptierte.

Hier ist ein kleiner Hinweis, wie ich dieses Problem überprüft und behoben habe.

  • Überprüfen, ob der Port Verbindungen akzeptiert:

    Telnet (MySQL Server IP) [PortNo]

  • Hinzufügen einer IP-Tabellenregel, um Verbindungen am Port zuzulassen:

    iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

  • Ich würde dies nicht für die Produktionsumgebung empfehlen, aber wenn Ihre iptables nicht richtig konfiguriert sind, kann das Problem durch Hinzufügen der Regeln möglicherweise immer noch nicht behoben werden. In diesem Fall sollte Folgendes getan werden:

    Service Iptables stoppen

Hoffe das hilft.

Kushal
quelle
3

Wenn Sie eine dynamische IP-Adresse verwenden, gewähren Sie nur Zugriff auf 192.168.2.%. Jetzt müssen Sie sich nicht mehr darum kümmern, jedes Mal Zugriff auf Ihre IP-Adresse zu gewähren.

Nitin Jaiman
quelle
1

Ich hatte Probleme mit der Remote-Anmeldung bei MYSQL für meine Amazon EC2 Linux-Instanz. Die Lösung bestand darin, sicherzustellen, dass meine Sicherheitsgruppe eine eingehende Regel für den MySQL-Port 3306 enthält, die meine IP-Adresse enthält (oder 0.0.0.0/0 für irgendwo). Sofort konnte ich eine Remoteverbindung herstellen, sobald ich diese Regel hinzugefügt habe.

Brendan Moore
quelle
1

Neuer Speicherort für die MySQL-Konfigurationsdatei ist

/etc/mysql/mysql.conf.d/mysqld.cnf
stackMonk
quelle
0

MySQL ODBC 3.51 Treiber ist, dass Sonderzeichen im Passwort nicht behandelt werden.

"Warnung - Bei MySQL ODBC 3.51 kann es zu ernsthaften Kopfschmerzen kommen, wenn das Kennwort in Ihrem GRANT-Befehl Sonderzeichen enthält, z. B.! @ # $% ^ ?. Der MySQL ODBC 3.51 ODBC-Treiber unterstützt diese Sonderzeichen im Kennwortfeld nicht. Die einzige Fehlermeldung, die Sie erhalten würden, ist "Zugriff verweigert" (mit Kennwort: JA) "- von http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/

PiperKeith
quelle
0

Die Benutzer / Host-Kombination wurde möglicherweise ohne Kennwort erstellt.

Ich ging davon aus, dass beim Hinzufügen eines neuen Hosts für einen vorhandenen Benutzer (mithilfe einer GUI-App) das vorhandene Kennwort auch für die neue Benutzer / Host-Kombination verwendet wird.

Ich könnte mich mit anmelden

mysql -u username -p PASSWORD

lokal, aber nicht von IPADDRESS mit

mysql -u --host=HOST -p PASSWORD

(Ich könnte mich tatsächlich von IPADDRESS aus anmelden, ohne ein Passwort zu verwenden.)

mysql -u --host=HOST

Festlegen des Passworts erlaubt den Zugriff:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';
andkrup
quelle
1
Vielen Dank, ich habe viel Zeit damit verbracht, eine Remoteverbindung zu meinem MySQL-Server herzustellen, und diese Leitung hat mir sehr geholfen. Beim Festlegen des Benutzerpassworts wurde der Fehler angezeigt,ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number der mich zu diesem Artikel führte: knowmysql.blogspot.com/2013/09/… Nachdem ich diese Schritte ausgeführt hatte, konnte ich endlich eine Verbindung zum Server herstellen.
Andy Forceno