Lorsque vous installez un serveur MYSQL (ou un serveur LAMP avec tasksel), celui ci est paramétré par défaut pour n’autoriser que les connexions provenant de localhost, pour des raisons de sécurité.
[root@halter]:# telnet 10.0.0.134 3306 Trying 10.0.0.134... telnet: Unable to connect to remote host: Connection refused |
Si on effectue un scan de port sur l’ordinateur hébergeant le serveur Mysql, on voit bien que le port par défaut de Mysql, le 3306, n’apparait pas. Il est donc impossible de se connecter à se serveur depuis un autre ordinateur du réseau.
[root@halter]:# nmap 10.0.0.134</code> Starting Nmap 4.76 ( http://nmap.org ) at 2010-04-04 15:15 CEST Interesting ports on vdomaine.com (10.0.0.134): Not shown: 996 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https 2000/tcp open callbook MAC Address: 00:1E:2A:B4:CA:xx (Netgear) |
Pour indiquer au serveur qu’il doit autoriser les connexions provenant d’autres ordinateurs du réseau, il faut modifier le fichier de configuration de Mysql, le fichier /etc/mysql/my.cnf et modifier 2 lignes:
La première, dé-commentée par défaut, indique au serveur d’ignorer les requêtes extérieures. Il faut donc la commenter (ou la supprimer)
#skip-external-locking |
La seconde indique au serveur sur quelle adresse il faut écouter les requètes. Par défaut, il s’agit de 127.0.0.1. Si vous voulez autoriser le réseau local, n’indiquez pas une adresse réseau mais bien l’adresse du serveur sur le réseau. D’où l’intérêt d’avoir des réglages IP fixes ou des baux permanents attribués par le DHCP. Dans le cas contraire, je vous promet des heures de recherche infructueuses avant de revenir dessus.
# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 10.0.0.134 |
Une fois le serveur Mysql relancé, un nouveau scan montre l’ouverture effective pour Mysql:
[root@halter]:# nmap 10.0.0.134</code> Starting Nmap 4.76 ( http://nmap.org ) at 2010-04-04 15:16 CEST Interesting ports on vdomaine.com (10.0.0.134): Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https 2000/tcp open callbook 3306/tcp open mysql MAC Address: 00:1E:2A:B4:CA:xx (Netgear) |
A partir de ce moment, une connexion au serveur a déjà beaucoup plus de chances de réussir:
manu@halter:~$ mysql -p -h 10.0.0.134 -u othtest -P 3306 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 42 Server version: 5.1.41-3ubuntu11 (Ubuntu) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> |
Ce n’est pas une astuce extraordinaire, mais maintenant que j’en ai fait un article, je suis sûr de m’en souvenir et de ne plus perdre une matinée à trouver le problème lorsque je rechangerais mon adressage… Alors, j’imagine que ça sera utile pour d’autres que moi.
Articles en relation:
- [Apache2] Résoudre « Code d’erreur : ssl_error_rx_record_too_long »
- Communiquer par un tunnel crypté SSH avec votre serveur comme relai (depuis Linux)
- Mysql: Résoudre l’erreur « La connexion au « controluser » tel que défini dans votre configuration a échoué. »
- Déplacer les base mysql sur Ubuntu
- Filtrer les connexions ssh
« La première, dé-commentée par défaut, indique au serveur d’ignorer les requêtes extérieures » : ce n’est pas vrai.
http://dev.mysql.com/doc/refman/5.0/fr/system.html : « L’utilisation de l’option –skip-external-locking de MySQL empêche les verrous externes. Cela n’influencera pas les fonctionnalités de MySQL tant que vous n’utilisez qu’un seul serveur ».
Il suffit juste de commenter la ligne bind mais également d’autoriser l’utilisateur souhaité à se connecter à distance.
@ julito
C’est tout à fait juste… sauf que dans mon cas ça ne fonctionnait pas tant que cette ligne n’était pas commentée. Et sur deux installations différentes.
Étant donné que je n’ai qu’un seul serveur MySql accédant aux tables, ce qui est le cas de 99% des gens, activer ou pas cette option ne change rien au fonctionnement. Sauf que ça me permet de me connecter au serveur.
Mais c’est vrai que je l’ai très mal expliqué.
Bonjour,
il est bien plus sécurisé de se connecter en localhost, c’est à dire sans changer la configuration du serveur MySQL.
Il suffit simplement de créer un tunnel SSH (option -L) et le tour est joué.
Si on aime les interfaces graphiques, le paquet mysql-admin donne un confort indéniable pour la plupart des opérations sur les bases.
A bientôt
Grégoire
Bonjour,
il est bien plus sécurisé de se connecter en localhost, c’est à dire sans changer la configuration du serveur MySQL.
Il suffit simplement de créer un tunnel SSH (option -L) et le tour est joué.
Si on aime les interfaces graphiques, le paquet mysql-admin donne un confort indéniable pour la plupart des opérations sur les bases.
A bientôt
Grégoire
C’est vrai. Sauf qu’on fait comment pour faire tourner une appli sur windows et se connecter au serveur sql???
S’il faut ajouter des applis pour ça, sur un réseau local, autant ouvrir le serveur mysql à la connexion depuis le réseau.