it-swarm.com.de

MySQL-Root-Zugriff von allen Hosts

Ich habe den MySQL-Server auf einem entfernten Ubuntu-Rechner installiert. Der Benutzer root ist in der Tabelle mysql.user folgendermaßen definiert:

mysql> SELECT Host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| Host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1              | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

Ich kann mit dem Benutzer root von derselben Remote-Computer-Befehlszeilenschnittstelle aus mit dem Standard mysql-Client zugreifen. Nun möchte ich root-Zugriff von jedem Host im Internet erlauben , daher habe ich versucht, die folgende Zeile hinzuzufügen (es handelt sich hierbei um ein exaktes Duplikat der ersten Zeile aus dem vorherigen Speicherauszug außer der Spalte Host):

mysql> SELECT Host, user, password FROM user WHERE Host = '%';
+------------------+------+-------------------------------------------+
| Host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

Mein Client auf meinem PC sagt mir jedoch weiter (ich habe die Server-IP verdeckt):

SQL-Fehler (2003): Keine Verbindung zum MySQL-Server unter '46 .x.x.x '(10061) möglich.

Ich kann nicht erkennen, ob es sich um einen Authentifizierungsfehler oder einen Netzwerkfehler handelt. Auf der Server-Firewall habe ich Port 3306/TCP für 0.0.0.0/0 aktiviert, und das ist für mich in Ordnung ...

124
lorenzo-s

Es gibt zwei Schritte in diesem Prozess:

a) Gewähren Sie Privilegien. Als root-Benutzer ausführen:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

b) an alle Adressen binden:

Der einfachste Weg ist, auskommentieren die Zeile in Ihrer my.cnf-Datei:

#bind-address = 127.0.0.1 

und starte mysql neu

service mysql restart

Standardmäßig wird nur an localhost gebunden. Wenn Sie die Zeile jedoch kommentieren, wird sie an alle gefundenen Schnittstellen gebunden. Das Auskommentieren der Zeile entspricht bind-address=*.

Um zu überprüfen, wo der MySQL-Dienst gebunden ist, führen Sie ihn als root aus:

netstat -tupan | grep mysql

Update für Ubuntu 16:

Konfigurationsdatei ist (jetzt) 

/etc/mysql/mysql.conf.d/mysqld.cnf 

(zumindest auf Standard Ubuntu 16)

296
hovanessyan

Führen Sie die folgende Abfrage aus:

use mysql;

update user set Host='%' where Host='localhost'

HINWEIS: Nicht für die Verwendung in der Produktion empfohlen.

27
Babu James

Manchmal

bindungsadresse = 127.0.0.1 

sollte sein 

bind-address = *

7
user2839051

MariaDB läuft auf Raspbian - die Datei mit der Bindungsadresse ist schwer zu lokalisieren. MariaDB hat einige nicht-sehr-hilfreiche-Informationen zum Thema.

Ich benutzte 

# Sudo grep -R bind-address /etc 

zu finden, wo das verdammte Ding ist.

Ich musste auch die Privilegien und Hosts in MySQL einstellen, wie alle anderen oben angegeben haben. 

Und ich hatte auch Spaß daran, den Port 3306 für Remote-Verbindungen zu meinem Raspberry Pi zu öffnen - schließlich iptables-persistent .

Alles funktioniert jetzt großartig.

4
The Big Zank

wenn Sie viele Netzwerke an Ihr Betriebssystem angeschlossen haben, müssen Sie eines dieser Netzwerke in der Bindeadresse der Datei my.conf ..__ angeben. ein Beispiel:

[mysqld]
bind-address = 127.100.10.234

diese ip stammt von einer ethX-konfiguration.

1
felipe cardenas

MYSQL 8.0 - Öffnen Sie den MySQL-Befehlszeilenclient
ERWÄHLE ALLE PRIVILEGES AUF *. * ZU 'root' @ 'localhost'
benutze mysql
UPDATE mysql.user SET Host = '%' WHERE Benutzer = 'root';
Starten Sie den mysql-Dienst neu

1
user10580057

mysql_update ist was Sie brauchen.

Ich weiß nicht, warum jemand die komplexeren Möglichkeiten zur Behebung dieses Problems befolgen würde, als MySql ein Tool entwickelte, das dies bereits tut ...

0
Kieran Foot

In meinem Fall war die Einstellung "Bindeadresse" das Problem. Das Kommentieren dieser Einstellung in my.cnf tat nicht help, da in meinem Fall mysql aus irgendeinem Grund den Standardwert auf 127.0.0.1 setzt.

Um zu überprüfen, welche Einstellung MySql gerade verwendet, öffnen Sie die Befehlszeile in Ihrer lokalen Box:

mysql -h localhost -u myname -pmypass mydb

Lesen Sie die aktuelle Einstellung aus:

Show variables where variable_name like "bind%"

Sie sollten 0.0.0.0 hier anzeigen, wenn Sie den Zugriff von allen Hosts zulassen möchten. Ist dies nicht der Fall, bearbeiten Sie Ihren /etc/mysql/my.cnf und legen Sie im Abschnitt [mysqld] die Bindeadresse fest:

bind-address=0.0.0.0

Starten Sie schließlich Ihren MySql-Server neu, um die neue Einstellung zu übernehmen:

Sudo service mysql restart

Versuchen Sie es erneut und prüfen Sie, ob die neue Einstellung übernommen wurde.

0
iHaveacomputer