Remote zu einem MySQL Server verbinden

Macbook Pro

Im Hinblick auf die Betriebssicherheit ist das Öffnen eines MySQL Servers nach außen prinzipiell fragwürdig. Dennoch ist es in manchen Fällen unumgänglich, dass ein MySQL Server remote (d.h. nicht von der Maschine auf der der MySQL Server läuft) administriert wird. Zum Beispiel in Entwicklungs- / Designumgebungen oder wenn eine zetrale Verwaltung mehrerer Server mit einem GUI wie der MySQL Workbench angestrebt wird.

Nach der Installation ist der MySQL Server erstmal von außen nicht erreichbar. Das ist durchaus sinnvoll um nicht ungewollte Sicherheitslücken zu schaffen. Auch ist das hier gezeigte Vorgehen mit dem root-User nicht unbedingt empfehlenswert und soll lediglich zur Demonstration dienen. Für ein Echtsystem empfehle ich Ihnen einen eigenen User pro Datenbank anzulegen, der die entsprechenden Zugriffsrechte bekommt und keine globalen Rechte auf dem Server hat. Damit der Remote-Zugriff möglich ist, müssen einige Einstellungen an der Konfiguration vorgenommen werden.

1. Firewall prüfen

Der MySQL Server kommuniziert über den Port 3306 (Standard) mit der Außenwelt. Stellen Sie sicher, dass Ihre Firewalls (sowohl am Client als auch auf dem Server) so konfiguriert sind, dass dieser Port offen ist.

2. MySQL root User Passwort setzen

Sollten Sie bei der Installation des Servers für den root User noch kein Passwort festgesetzt haben, gehen Sie bitte wie folgt vor. Öffnen Sie die Shell am Server und führen Sie folgende Kommandos aus:

mysql -u root
mysql > SET PASSWORD FOR 'ROOT'@'LOCALHOST" = PASSWORD('ihr_passwort');

Anstelle von ihr_passwort setzen Sie bitte das von Ihnen gewünschte Passwort für den root User.

3. Host-Eintrag für User erstellen

Nun muss der MySQL Server noch wissen, dass der User root nicht nur von der lokalen Maschine (localhost) zugreifen darf. Zum Speichern dieser Information nützt MySQL eine Host-Tabelle, in der die Kombinationen aus User und Host (und einige weitere Daten) gespeichert sind. Öffnen Sie wieder die Shell und loggen Sie sich in Ihren MySQL Server ein, sofern Sie nicht vom vorherigen Schritt noch eingeloggt sind:

mysql -u root -p

Host-Tabelle auslesen

Sie können nun die Host-Tabelle auslesen um zu sehen, welche Berechtigungen bereits eingetragen sind:

mysql > use mysql;
mysql > select host, user from user;

Das Ergebnis wird ähnlich wie das Folgende aussehen:

+------------------+------------------+
| host             | user             |
+------------------+------------------+
| 127.0.0.1        | root             |
| ::1              | root             |
| ip-192-168-0-234 | root             |
| localhost        | debian-sys-maint |
| localhost        | root             |
+------------------+------------------+
5 rows in set (0.00 sec)

Wie Sie sehen haben hier alle User ausschließlich das Recht sich lokal anzumelden – die 192er Adresse entspricht in diesem Beispiel auch dem localhost.

Host-Tabelle erweitern

Angenommen Sie möchten sich von der IP Adresse 1.2.3.4 auf den Server verbinden, dann muss diese IP in die Host-Tabelle aufgenommen werden. Führen Sie folgenden Befehl aus und ersetzen Sie dabei 1.2.3.4 durch Ihre IP und ihr_passwort durch das Passwort, dass der root User in diesem Fall verwenden muss.

mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'1.2.3.4' IDENTIFIED BY 'ihr_passwort' WITH GRANT OPTION;
mysql > flush privileges;

Der Befehl flush privileges ist nötig, damit der Server die gesetzten Rechte neu lädt. Wenn Sie sich nun die Host-Tabelle nochmals ausgeben lassen, sollte der neue Eintrag vorhanden sein:

mysql> select host,user from user;
+------------------+------------------+
| host             | user             |
+------------------+------------------+
| 127.0.0.1        | root             |
| 1.2.3.4     | root             |
| ::1              | root             |
| ip-192-168-0-234 | root             |
| localhost        | debian-sys-maint |
| localhost        | root             |
+------------------+------------------+
6 rows in set (0.00 sec)

4. Bind-Adress des Servers freigeben

Out-of-the-Box ist der Server aus Sicherheitsgründen auf die lokale IP Adresse gebunden – das heißt er reagiert lediglich auf Requests von 127.0.0.1. Diese Bindung ist in der Konfigurationsdatei my.conf festgelegt und kann folgendermaßen aufgehoben werden:

sudo vi /etc/mysql/my.cnf

Suchen Sie in der Datei nach folgender Zeile:

bind-address = 127.0.0.1

und kommentieren Sie ihn mit einem Raute Zeichen aus:

#bind-address = 127.0.0.1

Beenden Sie anschließend den Editor (im Falle von VI mit :w und :q) und starten Sie den MySQL Server neu:

sudo /etc/init.d/mysql restart

Nun lauscht Ihr Server auf allen Interfaces für eingehende Anfragen. Die Konfiguration ist damit beendet und Sie können sich von der angegebenen IP Adresse remote auf Ihren MySQL Server als root User verbinden. Bitte beachten Sie, dass es zu diesem Thema auch unzählige Sicherheitsrelevante Punkte zu beachten gibt, die aber den Rahmen dieses kurzen Tutorials sprengen würden. Ich empfehle Ihnen die Recherche im Netz oder entsprechende Fachliteratur zum Thema Sicherheit bei MySQL Servern.

Kommentar verfassen

Folge mir auf Twitter

Hol Dir kostenlos Tipps und Tricks zu Shopware, E-Commerce und andere Open-Source Produkte.

Folge @synonymousrocks