Vous voulez brancher un client de bureau sur une base hébergée sur un serveur. La voie rapide - écouter sur toutes les adresses et ouvrir le port - met votre base face à internet tout entier, où les scanners la trouvent en quelques heures. Il y a mieux, et ce n'est pas plus long.
La bonne réponse : un tunnel SSH
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
La base continue de n'écouter que sur localhost, rien n'est ouvert dans le pare-feu, et la connexion est chiffrée par SSH. Tous les clients de bureau - TablePlus, DBeaver, Sequel Ace, MySQL Workbench - l'ont intégré sous forme d'option SSH.
Vérifier qu'elle n'est pas déjà exposée
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
S'il faut vraiment qu'elle soit joignable
Un serveur d'application dans un autre centre de données, par exemple. Alors : un réseau privé si l'hébergeur en propose un, une règle de pare-feu nommant l'adresse source exacte, un utilisateur restreint à cet hôte, et le TLS exigé.
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';
Vérifier ce qui existe déjà
SELECT user, host FROM mysql.user ORDER BY host;
Toute ligne avec % dans la colonne hôte mérite une explication. Voyez utilisateurs et droits, sans en donner trop.