Die meisten Mysql-Server aber auch andere Backend-Dienste sind heutzutage aus gutem Grund durch Firewalls für externe Zugriffe gesperrt. Als Webdeveloper muss man aber regelmäßig von extern auf diese Servern zugreifen. Ssh-Zugang zum gesicherten Netz und Administrationsrechte auf dem Server vorausgesetzt, beschreibt dieser Artikel eine elegante Lösung auf Basis eines SSH-Tunnels, welche auch die Verwendung von graphischen Tools wie beispielsweise MySQL Workbench ermöglicht. Die Vorgehensweise bezieht sich auf Unix-Systeme und ist nicht ohne weiteres auf Windows übertragbar.
Mysql-Server konfigurieren
In der Mysql-Konfigurationsdatei sind abhängig von der verwendeten Distribution Anpassungen nötig. So muss falls vorhanden die Konfigurationsoption skip-networking
auskommentiert und eine neue Zeile mit dem Inhalt bind-adress = 127.0.0.1
eingefügt werden. skip-networking
hätte zur Folge, dass Mysql nur an den lokalen Sockets lauschen würde. Mit bind-adress
gibt man eine IP an, an der gelauscht wird. Das Lauschen an 127.0.0.1
macht Mysql nicht unsicherer, macht den hier beschriebenen Zugriff über das Netzwerk aber erst möglich.
#skip-networking bind-adress = 127.0.0.1
Weiter muss der Mysql-Benutzer, der im Folgenden verwendet wird, für den Zugriff von 127.0.0.1
freigeschaltet sein. Auskunft bieten die Tabellen user
und host
in der Datenbank mysql
. Ggf. müssen die Einstellungen für den Benutzer angepasst werden. Nähere Informationen hierzu findet man im Mysql-Referenzhandbuch.
Abschließend muss der Server mittels
/etc/init.d/mysql restart
neu gestartet werden, damit die Änderungen übernommen werden.
SSH-Tunnel aufbauen
Der nötige SSH-Tunnel zum Server ist schnell per
ssh -N user@example.com -L 53306:127.0.0.1:3306
aufgebaut. In diesem Beispiel wird eine sichere Portweiterleitung vom lokalen Port 53306
auf den Port 3306
des Servers example.com
eingerichtet. 3306
ist der Standard-Port des Mysql-Servers, 53306
ist ein frei gewählter nicht privilegierter Port auf dem Client.
Nach erfolgreichem Verbindungsaufbau kann man sich beispielsweise per Mysql Query Browser, bzw. Mysql Workbench mit dem entfernten Mysql-Server verbinden. Als Server Hostname gibt man dabei 127.0.0.1
, als Server Port den gewählten nicht privilegierten, im Beispiel 53306
, an. Um den Rest kümmert sich die Portweiterleitung.