Accès externe base de données
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
Question

Accès externe base de données

by
LeonardJ
Created on 2018-07-18 10:29:41 (edited on 2024-09-04 12:10:21) in Serveurs Privés Virtuels (VPS)

Bonjour,
J'ai mis en place un serveur mysql sur mon VPS, or je n'arrive pas à me connecter à cette base depuis l'extérieur. Le port 3306 est bien ouvert, j'ai donné des droits suffisants, je ne comprend donc pas..
J'utilise Navicat pour me connecter et je souhaiterait également connecter mon site à la base de données du VPS.
Je sais réaliser ça en PHP mais lorsque j'utilise l'adresse IP du VPS en hôte, celui-ci ne se connecte pas et émet une erreur.

Je sollicite donc votre aide sur ce point car ayant travaillé dessus plusieurs jours, à ce stade je bloque.

Cordialement


3 Replies ( Latest reply on 2018-07-18 18:18:21 by
LeonardJ
)

Bonjour,

Pour connecter le site il faut utiliser localhost ou 127.0.0.1 et pas l'IP publique.

Pour ce qui est de l'accès externe, Vous avez bien configuré le SGBD pour qu'il écoute sur l'IP et non en local ?

Cordialement, janus57

Le site n'est pas hébergé chez ovh, je ne peux donc pas mettre localhost. Et je n'arrive pas à modifier le bind-address de mysql, je ne vois pas cette ligne dans my.cnf

Tout simplement ajouter la ligne :
bind-address = 0.0.0.0

Attention, par défaut la communication mysql se fait en clair, sans ssl....
Il est vivement recommandé de mettre en place un vpn pour les connexions à MySQL histoire de ne pas laisser le port du service ouvert sur le web, ou à minima de configurer les connexions avec SSL.

Dans tous les cas il faut vérifier si le port 3306 est bien accessible depuis l'extérieur (un petit nmap -p 3306 fera l'affaire.
Ensuite vérifier les autorisations de connexion à MySQL (champ host de l'user).

J'ai bien ajouté bind-address = 0.0.0.0 dans /etc/mysql/mysql.conf.d/mysqld.cnf (je suis sous Ubuntu)

Et le nmap donne

Starting Nmap 7.60 ( https://nmap.org ) at 2018-07-18 17:52 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
PORT STATE SERVICE
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds

Et pourtant cela ne fonctionne toujours pas :/

Hum quelle est l'erreur exacte lors de la tentative de connexion ?
l'user sql utilisé est bien configuré pour autoriser les connexions distantes ?


Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
PORT STATE SERVICE
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds


On dirait que vous avez effectué le `nmap` depuis le même serveur pour localhost donc ça ne dit pas si MySQL écoute sur l'interface réseau connectée à Internet (pour les connexions depuis l'extérieur).

Question bête au cas où : vous avez bien redémarré MySQL après avoir modifié le fichier de configuration ?

Et que donne un `netstat -tlpen` ?

Avec la commande, j'obtiens ça :

netstat -tlpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 8489 1016/sshd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 106 12908 3077/mysqld
tcp6 0 0 :::22 :::* LISTEN 0 8491 1016/sshd

Donc en effet il ne voit visiblement pas le port 3306, comment puis-je l'ajouter ?

Mais lorsque j'essaye de me connecter avec Navicat, j'obtiens cette erreur


tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 106 12908 3077/mysqld

Donc en effet il ne voit visiblement pas le port 3306, comment puis-je l'ajouter ?


Si c'est bon, la ligne d'avant indique que MySQL écoute sur toutes les interfaces réseau (adresse 0.0.0.0).

Quant à l'erreur Navicat je ne suis pas expert MySQL mais on dirait plutôt que c'est l'utilisateur avec lequel vous essayez de vous connecter qui n'a pas les privilèges nécessaires au niveau de MySQL lui-même (peut-être qu'il n'a les droits pour se connecter que depuis localhost justement ?).

En effet j'ai juste eu à configurer un utilisateur. Je suis reparti d'un nouvel OS Ubuntu vierge et ça fonctionne désormais, merci à vous !