Wie man den Fernzugriff auf MySQL ermöglicht

0 Aktien
0
0
0
0

Einführung

Viele Websites und Anwendungen beginnen mit einem Webserver und einer zugehörigen Datenbank, die auf einem einzigen Rechner gehostet werden. Mit der Zeit kann eine solche Konfiguration jedoch unübersichtlich und schwer skalierbar werden. Eine gängige Lösung besteht darin, diese Funktionen zu trennen, indem eine Remote-Datenbank betrieben wird und Server und Datenbank auf eigenen Rechnern unabhängig voneinander wachsen können.

Eines der häufigsten Probleme beim Einrichten einer MySQL-Datenbank per Fernzugriff ist, dass die MySQL-Instanz nur für lokale Verbindungen konfiguriert ist. Dies ist die Standardeinstellung von MySQL, funktioniert aber nicht für die Einrichtung einer Remote-Datenbank, da MySQL auf einer externen IP-Adresse erreichbar sein muss. Um dies zu aktivieren, öffnen Sie Ihre mysqld.cnf-Datei:

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

Gehen Sie zu der Zeile, die mit dem Befehl „bind-address“ beginnt. Sie sieht folgendermaßen aus:

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# 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
. . .

Standardmäßig ist dieser Wert auf 127.0.0.1 gesetzt, was bedeutet, dass der Server nur lokale Verbindungen akzeptiert. Sie müssen diese Direktive ändern, um auf eine externe IP-Adresse zu verweisen. Zur Fehlerbehebung können Sie diese Direktive auf eine Wildcard-IP-Adresse setzen, entweder *, :: oder 0.0.0.0.

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
. . .

Nachdem Sie diese Zeile geändert haben, speichern und schließen Sie die Datei (STRG + X, Y, dann EINGABE, wenn Sie sie mit nano bearbeitet haben).

Starten Sie anschließend den MySQL-Dienst neu, um die Änderungen, die Sie an der Datei mysqld.cnf vorgenommen haben, anzuwenden:

sudo systemctl restart mysql

Wenn Sie ein MySQL-Benutzerkonto verwenden möchten, um von Ihrem Remote-Host aus eine Verbindung zur Datenbank herzustellen, müssen Sie dieses Konto so konfigurieren, dass die Verbindung vom Remote-Server und nicht vom lokalen Host aus erfolgt. Öffnen Sie dazu den MySQL-Client als MySQL-Root-Benutzer oder mit einem anderen privilegierten Konto.

sudo mysql

Wenn Sie die Passwortauthentifizierung für root aktiviert haben, sollten Sie stattdessen den folgenden Befehl verwenden, um auf die MySQL-Shell zuzugreifen:

mysql -u root -p

Um den Benutzerhost zu ändern, können Sie den MySQL-Befehl RENAME USER verwenden. Führen Sie den folgenden Befehl aus und ersetzen Sie dabei „sammy“ durch Ihren MySQL-Benutzerkontonamen und „remote_server_ip“ durch die IP-Adresse Ihres Remote-Servers:

RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';

Alternativ können Sie mit folgendem Befehl ein neues Benutzerkonto erstellen, das sich nur vom Remote-Host aus verbindet:

CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';

Weisen Sie dem neuen Benutzer anschließend die für Ihre spezifischen Anforderungen passenden Berechtigungen zu. Das folgende Beispiel gewährt dem Benutzer globale Berechtigungen zum Erstellen, Ändern und Löschen von Datenbanken, Tabellen und Benutzern sowie die Berechtigung zum Einfügen, Aktualisieren und Löschen von Daten in beliebigen Tabellen auf dem Server. Außerdem kann der Benutzer Daten mit SELECT abfragen, Fremdschlüssel mit dem Schlüsselwort REFERENCES erstellen und FLUSH-Operationen mit der Berechtigung RELOAD durchführen. Sie sollten Benutzern jedoch nur die Berechtigungen erteilen, die sie benötigen, damit Sie die Benutzerberechtigungen bei Bedarf anpassen können.

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'remote_server_ip' WITH GRANT OPTION;

Anschließend empfiehlt es sich, den Befehl FLUSH PRIVILEGES auszuführen. Dadurch wird jeglicher Speicher freigegeben, den der Server aufgrund vorheriger CREATE USER- und GRANT-Befehle reserviert hat.

FLUSH PRIVILEGES;

Anschließend können Sie den MySQL-Client beenden:

exit

Abschließend sei noch erwähnt, vorausgesetzt, Sie haben eine Firewall auf Ihrem Datenbankserver konfiguriert, dass Sie außerdem Port 3306 – den Standardport von MySQL – öffnen müssen, um den MySQL-Datenverkehr zu ermöglichen.

Wenn Sie nur von einem bestimmten Rechner auf den Datenbankserver zugreifen möchten, können Sie diesem Rechner mit dem folgenden Befehl die exklusive Berechtigung zur Verbindung mit der Remote-Datenbank erteilen. Ersetzen Sie dabei unbedingt remote_IP_address durch die tatsächliche IP-Adresse des Rechners, mit dem Sie sich verbinden möchten:

sudo ufw allow from remote_IP_address to any port 3306

Falls Sie in Zukunft von anderen Rechnern auf die Datenbank zugreifen müssen, können Sie diesen Befehl verwenden, um ihnen vorübergehend Zugriff zu gewähren. Vergessen Sie nicht, Ihre jeweilige IP-Adresse anzugeben.

Alternativ können Sie Verbindungen zu Ihrer MySQL-Datenbank von jeder IP-Adresse mit folgendem Befehl zulassen:

sudo ufw allow 3306

Versuchen Sie anschließend, von einem anderen Gerät aus remote auf Ihre Datenbank zuzugreifen:

mysql -u user -h database_server_ip -p

Wenn Sie auf Ihre Datenbank zugreifen können, bestätigt dies, dass die Bind-Address-Direktive in Ihrer Konfigurationsdatei das Problem verursacht hat. Bitte beachten Sie, dass die Einstellung von 0.0.0.0 für Bind-Address unsicher ist, da dadurch Verbindungen zu Ihrem Server von jeder beliebigen IP-Adresse möglich sind. Sollten Sie hingegen weiterhin keinen Fernzugriff auf die Datenbank haben, liegt möglicherweise ein anderes Problem vor.

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen