1. Activer les connexions à distance MySQL
Sommaire
I. Présentation
II. Test de la connexion
III. Modification de la configuration
IV. Gestion de l’utilisation
V. Sécurisation de l’accès MySQL distant
I. Présentation
Dans ce tutoriel, nous allons apprendre à activer la gestion et la connexion à distance sur des bases de
données MySQL. Bien souvent, on gère nos bases de données MySQL viaPhpMyAdmin, une interface
web située sur notre serveur de base de données qui envoi des requêtes MySQL en local. Il peut cependant
arriver pour plusieurs raisons d’avoir besoin de gérer nos bases de données à distance en lignes de
commandes ou via des logiciels spécifiques comme SQLyog.
II. Test de la connexion
La connexion à la gestion MySQL en ligne de commande est par défaut possible qu’enlocalhost (via la
commande “mysql -u user -p“). Si on souhaite activer les connexions à distance, on utilise le
port 3306 (par défaut) comme indiqué dans le fichier de configuration “/etc/mysql/my.cnf” :
On peut, pour voir l’accès, tenter une connexion à distance sur notre MySQL. Depuis un autre serveur, on
entrera la commande suivante :
Shell
1 mysql -u user -p -h < IP serveur Mysql >
Nous aurons alors théoriquement ce message d’erreur :
2. Si on utilise la commande “perror” qui sert à décrire les messages d’erreurs de MySQL, nous verrons ce
résultat :
On voit donc bien que la connexion nous est impossible, avec un simple nmap, nous verrons en effet que le
port MySQL (3306) n’est pas ouvert sur l’IP sur serveur MySQL.
Shell
1 nmap -sV < IP serveur Mysql > -p 3306
III. Modification de la configuration
Nous allons donc ouvrir notre service MySQL sur l’IP de notre serveur MySQL. Nous allons modifier
notre fichier de configuration MySQL qui est “/etc/mysql/my.cnf“. On cherchera ensuite l’option “bind-
address” où l’on indiquera l’IP de notre serveur sur le réseau :
On doit ensuite redémarrer notre serveur MySQL :
Shell
1 service mysql restart
On peut ensuite retenter une connexion MySQL à distance en ligne de commande depuis un autre hôte
Shell
3. 1 mysql -u user -p -h < IP serveur >
IV. Gestion de l’utilisation
Il est alors possible que vous ayez ce message d’erreur :
Cela signifie que l’utilisateur en question (ici root) n’est pas autorisé à se connecter à distance mais
uniquement en localhost. Souvent cela passe par une création de l’utilisateur en “user”@”localhost”. On
doit donc modifier l’hôte de notre utilisateur pour soit y mettre une IP spécifique, soit y mettre tous les
hôtes (IP) possibles.
On doit alors se connecter en root sur notre base de données MySQL (pas encore à distance) pour changer
l’hôte de notre utilisateur avec la commande suivante :
Shell
1 UPDATE mysql.user SET Host = "%" WHERE user.Host = "localhost" AND user.User = "nom_user";
On met donc à jour l’hôte (Host) de notre utilisateur, “%” signifie tous les hôtes. Pour une sécurité accrue,
on pourrait mettre seulement une IP à la place de “%” (ex 192.168.1.17ou 192.168.1.0/24)
En peut ensuite retenter notre connexion MySQL à distance :
Shell
1 mysql -u user -p -h < IP serveur >
Notre connexion MySQL à distance est maintenant opérationnelle.
V. Sécurisation de l’accès MySQL distant
4. Pour augmenter la sécurité et ralentir des éventuels attaquants dans leurs démarches. Nous pouvons changer
le port par défaut pour les connexion MySQL à distance. On se rend pour cela dans notre fichier de
configuration “/etc/mysql/my.cnf“. On doit y changer les deux valeurs suivantes :
On choisie ici une valeur de “30306“. Cette valeur vous est libre mais on préférera un port au dessus
de 1024 car les ports 0-1024 sont des ports réservés. De plus, lors d’une utilisation simple de nmap, celui-
ci ne scan que les 1024 premiers ports, un port “30306” apparaitra donc pas dans un scan nmap simple. On
redémarrera à nouveau notre serviceMysql pour que les changements soient pris en compte :
Shell
1 service mysql restart
On pourra ensuite renouveler notre test de connexion Mysql à distance en y ajoutant l’option “-P” pour y
préciser le port :
Shell
1 mysql -u user -p -P 30306
5. A propos de l'auteur
Mickael
Fondateur de www.it-connect.fr et de www.information-security.fr, étudiant en Master Sécurité Systèmes
et réseaux à l'IIA (Laval). Je souhaite partager mes découvertes et connaissances avec les internautes
professionnels, étudiants et amateurs.
Autoriser l'accès à distance sur votre serveur MySQL
Vous pouvez configurer votre serveur MySQL afin qu'il soit accessible depuis un serveur distant. Cela peut être
utile si vous voulez que votre serveur de base de données soit séparé de votre serveur web, ou d'autres serveurs.
1. Accorder des droits à un nom d'utilisateur
Pour ce faire, vous aurez besoin d'accorder les droits nécessaire à un utilisateur MySQL afin que celui-ci ait les
droits sur la base autre part que sur le serveur hébergeant la base (localhost). Pour ce faire, tapez la commande
suivante (une fois connecté à la console en SSH) : (se connecter d'abord au serveur “mysql”)
grant all privileges on *.* to remoteuser@123.123.123.123 identified by
"userpassword";
Où:
*. désigne la ou les bases qui sont autorisées (* signifie toutes, mais vous pouvez n'en choisir qu'une
seule si vous le souhaitez),
remoteuser est le nom de l'utilisateur MySQL à qui vous accordez l'accès à distance,
123.123.123.123 est l'adresse IP du serveur distant auquel vous donnez l'accès (ceci peut être replacé
par * pour TOUS les serveurs),
6. userpassword est le mot de passe associé à l'utilisateur MySQL en question
Une fois que c'est fait, n'oubliez pas de “flusher” les privilèges. Cette commande fait en sorte que les
modifications soient immédiatement effectives, sans avoir à redémarrer le serveur :
flush privileges;
2. éditer my.cnf
Editez le fichier de configuration:
nano /etc/mysql/my.cnf
Par défaut, MySQL n'écoute que localhost. . Il faudra désactiver la ligne relative au bind-address dans le fichier
de configuration mysql:
/* bind-address = 127.0.0.1 */
3. redémarrer le serveur MySQL
/etc/init.d/mysql restart