15/11/2024

Base de données

Comment autoriser les connexions distantes dans MySQL ou MariaDB ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à activer les connexions à distance sur une base de données MySQL / MariaDB. C'est fréquent de voir le serveur Web et le serveur de bases de données sur le même serveur : ça fonctionne bien, et c'est un moyen d'économiser des ressources comme une seule machine est nécessaire. En fonction de votre environnement, et notamment si c'est une infrastructure distribuée, il y a des chances pour que les deux rôles soient indépendants : le serveur Web d'une part, le serveur de base de données d'autre part.

Par défaut, MySQL (ou MariaDB) accepte uniquement les connexions locales puisqu'il écoute sur l'interface "127.0.0.1" correspondante à l'adresse locale. De ce fait, si c'est un serveur Web distant qui doit être se connecter à la base de données pour le bon fonctionnement de l'application Web, c'est un problème. Ceci implique une configuration spécifique de MySQL afin d'autoriser les connexions distantes : c'est ce que nous allons voir.

Pour ce tutoriel, j'utilise une machine sous Debian 11 avec MariaDB mais la même procédure s'applique avec MySQL (en adaptant les chemins).

II. MySQL : modifier l'adresse IP d'écoute

Tout d'abord, nous devons configurer l'instance de façon à ce qu'elle écoute sur une autre adresse IP que "127.0.0.1". Pour MariaDB, le fichier à modifier est le suivant :

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Tandis que pour MySQL, ce sera ce fichier :

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

Dans ce fichier, vous trouverez la ligne suivant :

bind-address = 127.0.0.1

Vous devez remplacer cette adresse IP par l'adresse IP de votre serveur qui sera utilisée par le serveur Web pour contacter le serveur de base de données. Si vous indiquez "0.0.0.0", alors le serveur MySQL écoutera sur toutes ses interfaces. Dans cet exemple, j'indique l'adresse IP de mon serveur MySQL / MariaDB, à savoir "192.168.100.14".

bind-address = 192.168.100.14

Voici un exemple :

MySQL bind-address exemple

Enregistrez le fichier et redémarrez le service MySQL :

sudo systemctl restart mysql

La première étape est terminée !

III. MySQL : modifier le port d'écoute

Par défaut, MySQL écoute sur le port "3306". C'est une information connue que l'on peut trouver facilement dans la documentation officielle. Pour masquer ce service qui sera désormais exposé de manière limitée, nous pouvons modifier le port d'écoute. Ce n'est pas une obligation, mais c'est recommandé.

Pour MariaDB, il faudra modifier ce fichier :

sudo nano /etc/mysql/mariadb.cnf

Pour MySQL, il faudra modifier ce fichier :

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

La direction "port" sert à préciser le numéro de port que vous souhaitez utiliser. Par exemple, pour utiliser le port "33061", on indique :

port = 33061

Ensuite, il faut enregistrer le fichier et redémarrer le service MySQL une nouvelle fois. Attention, s'il y a des connexions actives sur le port 3306, elles seront coupées et elles ne fonctionneront plus !

IV. MySQL : autoriser les connexions distances dans le pare-feu

Si le pare-feu de votre machine Linux est actif et configuré, il devrait bloquer les flux distants à destination de votre serveur MySQL, que ce soit sur le port 3306 ou un autre port. Nous devons configurer le pare-feu local, que ce soit via IPtables, UFW ou FirewallD (selon le système).

A l'aide de UFW, voici comment autoriser les connexions entrantes sur le port "33061" uniquement pour l'hôte distant avec l'adresse IP "192.168.100.51". Il s'agit de l'adresse IP de mon serveur Web.

sudo ufw allow from 192.168.100.51 to any port 33061

Le message "Rule added" est retourné dans la console. Très bien, le flux devrait être autorisé.

V. MySQL : accorder l'accès distant à la base de données

Il nous reste une dernière autorisation à donner, au sein de la base de données en elle-même, pour un utilisateur spécifique. Logiquement, vous devez utiliser une base de données dédiée à votre application et lui associer un utilisateur dédié.

À partir du serveur MySQL, il faut se connecter à l'instance avec le compte root pour apporter des modifications sur la configuration :

mysql -u root -p

Saisissez le mot de passe du compte root. Voilà, vous êtes connecté : le prompt MySQL / MariaDB s'affiche à l'écran.

Si la base de données MySQL n'existe pas, il sera nécessaire de la créer au préalable :

CREATE DATABASE 'db_itconnect';

Si la base de données de l'application Web existe déjà, il faut ajouter des droits dessus avec la commande GRANT. Pour autoriser les connexions distantes à partir de l'adresse IP "192.168.100.51" pour l'utilisateur "flo" avec le mot de passe "MonSuperMotDePasseMySQL" sur la base de données "db_itconnect", on utilisera cette commande :

GRANT ALL PRIVILEGES ON db_itconnect.* TO 'flo'@'192.168.100.51' IDENTIFIED BY 'MonSuperMotDePasseMySQL' WITH GRANT OPTION;

Remarque : dans la commande précédente, le fait d'utiliser "%" à la place de l'adresse IP permet d'indiquer "tous les hôtes".

Puis, on met à jour les privilèges avant de quitter :

FLUSH PRIVILEGES;
EXIT;

Voilà, il reste une dernière étape : tester la connexion à distance à notre base de données MySQL / MariaDB !

VI. MySQL : tester la connexion distante

À partir du serveur Web avec l'adresse IP "192.168.100.51", il est temps d'effectuer une tentative de connexion. Logiquement, d'après notre configuration, c'est la seule adresse IP autorisée à se connecter à distance au serveur de bases de données. Pour cette connexion, on va devoir préciser le nom d'utilisateur, l'adresse IP de l'hôte c'est-à-dire le serveur MySQL, et le numéro de port s'il a été changé.

Ce qui donne :

mysql -u flo -p -h 192.168.100.14 -P 33061

Voici quelques informations sur la commande ci-dessus :

  • -u : nom d'utilisateur
  • -p : demander à saisir le mot de passe (une fois la commande exécutée)
  • -h : adresse IP ou nom d'hôte du serveur MySQL
  • -P : numéro de port, s'il n'est pas précisé le numéro de port 3306 est utilisé implicitement

C'est fait, la connexion à distance fonctionne ! Maintenant, il ne reste plus qu'à tester au sein de votre application ! Au moment de préciser le serveur MySQL, pensez à préciser le numéro si ce n'est pas celui par défaut, en utilisant la syntaxe suivante : 192.168.100.51:33061.

VII. Conclusion

Grâce à ce tutoriel, vous êtes capable de configurer votre serveur MySQL ou MariaDB pour qu'il autorise une machine distante à se connecter à une base de données !





author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

7 commentaires sur “Comment autoriser les connexions distantes dans MySQL ou MariaDB ?

  • salut j’aimerais que vous m’aider à me connecter ma base de donnée mysql server 5.6 .j’ai deux pc relier par retour/switch/hub en réseau local le premier pc contiens le sql server le deuxième pc contiens l’application VB pour accéder au donnée comment je peu résoudre ce problème merci.

    Répondre
    • Bjr abouelmahassin
      Tu as pu trouver la solution a ton probléme?
      Si oui alors partage stp.
      Je suis dans le besoin
      Merci

      Répondre
  • Bonjour

    est il possible de mettre un nom de machine ? plutôt q’une ip , car le poste client n’a pas d’ip fixe
    j’ai essayer cela ne fonctionne pas mais il y a peut être quelque chose de plus à modifier .

    Merci

    Répondre
  • Bonjour

    merci pour cet article qui m’a permis de vérifier les paramètres du serveur MySQL
    mais il a fallu pour ça fonctionne je fasse en plus les deux lignes suivante :

    grant all on *.* to root@’%’ identified by « lepassword »;
    flush privileges;

    si j’ai bien compris c’est pour ouvrir les droits d’accès depuis un ordinateur distant
    si ça peut servir à quelqu’un

    Répondre
    • Merci pour cette info qui m’a permis de débloquer mon cas.

      Répondre
  • Quelques informations pour que les connexions distantes fonctionnent dans le cadre suivant : MariaDB 10.5 sur une Debian 11.
    1- l’utilisateur MySQL doit être créé de la façon suivante : CREATE USER ‘moi’@’%’ IDENTIFIED BY ‘motdepasse’;
    où le joker ‘%’ indique que l’utilisateur ‘moi’ pourra se connecter depuis n’importe quelle machine et ‘motdepasse’ est le mot de passe du compte MySQL ‘moi’
    2- ce n’est pas le fichier /etc/mysql/my.cnf qu’il faut modifier mais le fichier /etc/mysql/mariadb.conf.d/50-server.cnf
    3- dans le fichier cité au point 2, repérer la ligne « bind-address = 127.0.0.1 » et remplacer cette adresse ip par l’adresse ip du serveur MySQL puis redémarrer le service MySQL
    4- il ne faut pas modifier la ligne « bind-address = 127.0.0.1 » dans le fichier /etc/mysql/my.cnf (ni enlever le # ni changer l’adresse ip) car la modification empêche alors la connexion en local

    Répondre
  • je ne sais pas depasse cet etape pour accede dans mon site
    connect_error) {
    die(« Connection Failed :  » . $connect->connect_error);
    } else {
    // echo « Successfully connected »;
    }
    ?>

    Erreur d’analyse : erreur de syntaxe, nombre à virgule flottante inattendu « 185.98 », variable attendue ou « { » ou « $ » dans /htdocs/pharmacy/amani/constant/connect.php à la ligne 9

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.