Admin/Dev

23
Juin
2019

MySQL/MariaDB : Se connecter à un serveur distant

Publié par sky

MySQL, ou son fork MariaDB, sont des logiciels de gestion de base de données basés sur un système de connexion client/serveur. Ainsi lors de l'installation, il est nécessaire d'installer une application serveur, puis une application cliente pour s'y connecter, même si nous sommes sur la même machine. Sur un serveur web, c'est tout simple, PHP ou le langage que vous utilisez devient client de l'application serveur.

Ce gestion séparée apporte bien des avantages, et en particulier, cela permet de se connecter au serveur MySQL/MariaDB depuis un serveur distant, que ce soit avec l'application cliente ou via un serveur web. Cependant, pour cela il faut avoir correctement configurer l'application serveur.

Imaginons deux machines :

  • DBSERVER : qui sera le serveur de base de données, et dont le nom d'hôte sera DBSERVER. DBSERVER possède une base de données DBDATA
  • WEBSERVER : qui sera un serveur web, ayant besoin des données de DBDATA, et dont le nom d'hôte sera WEBSERVER

A vous de modifier le tutorial selon les noms de vos machines, qu'elles soient serveur ou simple poste client.

 

1/ Autoriser les connexions distantes

Par défaut, le logiciel serveur est réglé pour n'être accessible que depuis la machine locale. Pour permettre l'accès depuis un autre serveur, il est nécessaire de dévérouiller un réglage sur la machine DBSERVER.

Selon les versions, ce réglage peut changer d'emplacement, sur MySQL, il est majoritairement accessible dans le fichier 

/etc/mysql/my.cnf

Sur MariaDB sur une Raspbian, le fichier à modifier est 

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

Dans le fichier, il faut modifier la ligne 

bind-address = 127.0.0.1 

en 

bind-address = 0.0.0.0

Cette action va permettre à MySQL d'écouter sur l'ensemble du réseau plutôt que sur l'adresse locale de la machine.

Et il ne faut pas oublier d'ouvrir le port 3306, utilisé par défaut par le logiciel pour écouter, sur votre firewall.

 

2/ Créer l'utilisateur MySQL

Maintenant que les connexions distantes sont acceptées, il faut pouvoir se connecter avec un compte valide sur le serveur pour accéder aux données. Pour cela, nous allons créer un utilisateur MySQL sur DBSERVER. Nous allons appeler cet utilisateur WebUser (avec un mot de passe).

Sur DBSERVER, utilisez le client local pour vous connecter au serveur, puis ajoutez l'utilisateur, sans oublier d'indiquer sa provenance WEBSERVER :

CREATE USER 'WebUser'@'WEBSERVER' IDENTIFIED BY 'mot_de_passe';

Il est aussi possible de permettre à WebUser de se connecter depuis n'importe où 

CREATE USER 'WebUser'@'%' IDENTIFIED BY 'mot_de_passe';

Mais cela serait moins sécurisé. Pour ma part, je préfère indiquer l'hôte et être sur que lui, et uniquement lui est capable de se connecter.

WebUser est désormais capable de se connecter, il faut lui octroyer les permissions sur la base de données DBDATA. Ici, je vais donner l'ensemble des droits, mais vous pouvez les ajouter de manière granulaire pour définir uniquement les droits que vous souhaitez partager.

GRANT ALL PRIVILEGES ON 'DBDATA'.* TO 'WebUser'@'WEBSERVER';
FLUSH PRIVILEGES;

 

3/ Connection depuis le client.

Depuis WEBSERVER, vous pouvez désormais vous connecter via le client MySQL

mysql -u WebUser -h DBSERVER -p

mais aussi depuis PHP

$connection = new mysqli('DBSERVER', 'WebUser', 'mot_de_passe', 'DBDATA'); 

 

4/ Connection non fonctionnelle ?

Lors de l'application de cette configuration, il n'est arrivé que la connexion ne se fasse pas sur le serveur WEBSERVER, mais pire, qu'elle ne se fasse plus sur le serveur DBSERVER.

Dans les deux cas, il s'agit bien souvent d'un soucis d'identification des serveurs dans les utilisateurs MySQL.

Avant d'utiliser le wildcard "%" ouvrant globalement le serveur au monde entier au moindre soucis (récupération des identifiants via une faille du serveur web par exemple), il est nécessaire de trouver une solution plus sécurisée.

La première solution est de remplacer le nom du serveur par son adresse IP et de re-créer l'utilisateur dans MySQL sur DBSERVER.

La seconde est de faire un ping sur la machine souhaitant se connecter, il est possible qu'elle ait plusieurs noms et que vous n'utilisiez pas celui qui est enregistré dans l'entrée A du registre DNS du domaine courant. Ainsi vous disposez de son nom réel.

 
 
Commentaires
Commentaire de Ho le 28 Février 2023 à 08:34

Excellente explication et merci beaucoup.

 
Commentaire de sky le 28 Février 2023 à 08:49

Merci pour votre message. Ravi que l'article ait pu vous aider.

 

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer