Externer Zugriff auf MySQL Server
Veröffentlicht am 20.09.2007 | Kommentar schreiben | Tags: php, mysql
In diesem Artikel wird beschrieben, wie man den externen Zugriff auf einen MySQL Server freischaltet und konfiguriert.
Normalerweise wird auf einen MySQL Server per localhost zugegriffen, da Web- und Datenbankserver auf dem gleichen Server laufen. Lagert man jedoch die Datenbank auf einen externen Server aus, so muss man diese erst für den externen Zugriff konfigurieren.
Hinweis: Diese Einstellungen für den MySQL Server sind nur mit root Rechten durchführbar.
MySQL Konfigurationsdatei my.conf
In der my.conf, diese liegt normalerweise in /etc/, wird folgender Code hinzugefügt:
bind-address 0.0.0.0 # offen für alle Adressen bind-address 127.0.0.1 # nur localhost bind-address 192.168.xxx.xxx # nur über die locale IP bind-address 123.456.689.101 # nur über diese statische IP
In diesem Beispiel Code werden mehrere Möglichkeiten für bind-address gezeigt, es genügt eine Zeile.
Jetzt müssen in den Tabellen user und db diese Einstellungen noch angepasst werden. Diese Tabellen sind Konfigurationstabellen des MySQL Servers und nur mit root-Rechten erreichbar. Für den Benutzer, mit dem man sich auf den MySQL Server verbinden möchte, werden die Einträge in diesen Tabellen in der Spalte host auf den Host geändert, von dem aus zugegriffen werden soll.
Weitere Konfigurationsmöglichkeiten findet man unter http://dev.mysql.com/doc/refman/5.1/de/connection-access.html.
MySQL Server neustarten
Anschließen muss der MySQL Server noch neugestartet werden, dies geht über die Shell-Console entweder mit:
shell > /etc/init.d/mysql reload
oder mit:
shell > /etc/init.d/mysql restart
Server mit Plesk
Wenn man auf einem Server mit Plesk arbeitet, so heißt der Benutzer mit root-Rechten nicht root, sondern admin. Folgende Befehle müssen zum Neustart des MySQL Servers ausgeführt werden:
shell > /etc/init.d/mysql -u admin -ppassword mysql > restart
Sicherheitshinweis
Sobald man den MySQL Server nach außen hin öffnet, existiert eine Schwachstelle die Angreifer ausnutzen können.
[Danke an nirgendwer]
Nicht ideal, eine DB einfach nach außen zu öffnen. Besser einen SSH-Tunnel verwenden.
Beim Plesk stimmt nicht ganz
Richtig wäre
/etc/init.d/mysqld restart (start|stop|restart)
zumindest beim plesk 8.4
Oh, böser Fehler.
> bind-address 0.0.0.0 # deaktiviert
Das stimmt nicht, ganz im Gegenteil. Der Adresse 0.0.0.0 steht allgemein für alle Adressen/Interfaces. Er lauscht so also "überall".
Siehe: http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_bind-address
bind-address = 192.168.xxx.xxx
läuft so nicht und der MySQL-Demon lässt sich nicht starten.
Es lässt sich tatsächlich nur eine IP binden. Oder man macht mit
bind-address = 0.0.0.0
ganz auf und steuert den Zugriff über iptables.