Sie wollen ein Desktop-Programm mit einer Datenbank auf einem Server verbinden. Der schnelle Weg - an alle Adressen binden und den Port öffnen - stellt Ihre Datenbank vor das ganze Internet, wo Scanner sie binnen Stunden finden. Es gibt einen besseren Weg, der nicht länger dauert.
Die richtige Antwort: ein SSH-Tunnel
ssh -N -L 3307:127.0.0.1:3306 sara@server.example.com
# then point the client at:
# host 127.0.0.1 port 3307
Die Datenbank lauscht weiterhin nur auf localhost, in der Firewall wird nichts geöffnet, und die Verbindung verschlüsselt SSH. Jedes Desktop-Programm - TablePlus, DBeaver, Sequel Ace, MySQL Workbench - hat das als SSH-Option eingebaut.
Sicherstellen, dass sie nicht schon offen liegt
sudo ss -tlnp | grep 3306
# 127.0.0.1:3306 good
# 0.0.0.0:3306 exposed
# /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1
Wenn sie wirklich erreichbar sein muss
Etwa ein Anwendungsserver in einem anderen Rechenzentrum. Dann: ein privates Netz, wenn der Anbieter eines hat, eine Firewallregel mit der genauen Quelladresse, ein auf diesen Host beschränkter Benutzer und erzwungenes TLS.
sudo ufw allow from 203.0.113.20 to any port 3306 proto tcp
CREATE USER 'app'@'203.0.113.20' IDENTIFIED BY '...' REQUIRE SSL;
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app'@'203.0.113.20';
Prüfen, was schon existiert
SELECT user, host FROM mysql.user ORDER BY host;
Jede Zeile mit % in der Host-Spalte verdient eine Erklärung. Siehe Benutzer und Rechte, ohne zu viel zu geben.