Accès à distance Mysql via Lampp

Le problème exposé dans ce sujet a été résolu.

Bonjour !

C’est après plusieurs heures de recherches et de manipulation que je viens demander votre aide. Je sens que j’approche du but, mais il y a toujours ce petit quelque chose qui m’échappe et que je n’arrive pas à résoudre.

Voici mon problème:

Dans le cadre de mes études, on (deux autres personnes et moi) avons pour projet de réaliser une application mobile sous Android pouvant se connecter à une base de données MySQL à distance. Faute de moyen, nous ne pouvons pas nous payer l’hébergement d’une base de données accessible autrement que via le site (comme le propose les sites gratuits).

Je me suis donc lancé dans la création d’un serveur maison avec un PC portable que j’ai sous la main. Après plusieurs recherches et de multiples manipulations, voici où j’en suis:

-J’ai un PC portable me servant de serveur et ayant comme adresse locale 192.168.0.12, accessible depuis Internet sur le port 80 (j’ai fait les redirections sur le routeur de la Freebox et ça fonctionne, je peux accéder à phpmyadmin depuis mon téléphone en 4G par exemple)

-Ce PC portable est sous Linux avec Lampp installé dessus (ce qui inclus donc un serveur apache et mysql, entre autres)

-J’ai un PC fixe, sur lequel tourne Wampp avec l’adresse locale 192.168.0.49, sur lequel j’ai un "projettest" (quelques pages en PHP utilisant une base de données que j’avais fait auparavant)

-J’ai un utilisateur qui a tous les droits pour n’importe quel hôte sur la bdd de mon PC portable (je sais que c’est pas terrible niveau sécurité, mais c’est pour du test pour l’instant)

J’ai donc essayé de faire tourner mon projettest sur mon PC fixe en utilisant la base de données sur mon PC portable, et c’est là que je coince.

[Illustration de l’erreur]https://www.noelshack.com/2017-11-1489540551-capture.png

Et voici le code me permettant de me connecter à la base de données. Pour rappel, ce code est exécuté sur Wampp, sur la machine en 192.168.0.49 donc:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 <?php
    class ModeleGenerique {
        private static $dns = "mysql:host=192.168.0.12;dbname=projettest";
        private static $user = "user";
        private static $password = "mdp";
        static protected $connexion;
        function __construct(){
            self::$connexion = new PDO(self::$dns, self::$user, self::$password);
        }
        function getPDO(){
            return self::$connexion;
        }
?>

Je précise par ailleurs que si je mets "localhost" à la place de 192.168.0.12, le site "projettest" marche parfaitement.

Voilà, je reste disponible si vous avez besoin d’autres informations !

Merci beaucoup par avance pour vos réponses

Mayann

+0 -0

Salut !

L’exception PDO est peu loquace, je te conseille de lui en demander plus en passant le paramètre supplémentaire qui va bien — voir la FAQ à ce propos.

Mais même sans message explicite, je pense que comme le site fonctionne sur une machine qui utilise une base de données sur la même machine, mettre localhost plutôt que l’IP pour la connexion est effectivement la chose à faire.

+0 -0

Tu as ouvert le port 80 qui est celui d’apache, quid du port 3306 du pare feu de la machine ?
(Je dois t’accorder que si ce PC est sous Linux, j’utiliserai Docker, comme ça, une base de donnée MariaDB avec les ports mappé vers l’extérieur et Docker gère les iptables. Il te reste plus qu’à configurer ta box)

+1 -0

Bonjour et merci à vous deux pour vos réponses !

Je ne pourrais essayer de faire les manipulations que ce soir (j’ai cours la journée :P)

Pour Ymox: Peut être que je n’ai pas été très clair, j’essaie d’accéder à la base de données de ma machine Linux depuis ma machine Windows. Le wamp sur mon PC fixe (192.168.0.49) ne sert qu’à interpréter le php. Si je mets localhost ça marche, mais ce n’est pas ce que je cherche. En revanche je regarderai attentivement comment avoir plus de détails avec l’exception PDO, merci ! :)

Pour Dryusdan: En effet j’y ai pensé hier, mais je ne maîtrise pas très bien le pare-feu Linux, et puis je pensais que le port de Mysql n’avait pas forcément besoin de communiquer à l’extérieur (que seul le port 80 suffisait). Du coup je regarderai ce soir aussi. Si j’ai bien compris, il faut que j’autorise les connexions entrantes et sortantes du port Mysql (3306) et il faut également que je redirige les connexions sur le port 3306 vers mon PC-Linux sur ma box c’est ça ?

Encore merci à vous deux

Pour Ymox: Peut être que je n’ai pas été très clair, j’essaie d’accéder à la base de données de ma machine Linux depuis ma machine Windows.

Mayann

Ah, pardon, j’avais mal compris.

Outre éventuellement la box, il faudrait aussi vérifier si MySQL accepte les accès distants, je crois me souvenir que ce n’est pas le cas par défaut.

+1 -0

Re-bonjour à tous les deux !

Désolé, j’ai eu un emploi du temps très chargé cette fin de semaine et je n’ai pas eu le temps de vous répondre.

J’ai donc fais ce qu’as dis Dryusdan, à savoir ouvrir les ports 80 et 3306 sur iptables et rediriger les ports 80 et 3306 vers ma machine Linux au niveau de la box. Et tout marche niquel ! :D

J’ai oublié une question: Maintenant je peux me connecter sur mon "serveur" à l’aide de l’adresse IP de ma freebox (82.xxx.xxx.xxx), le problème étant maintenant que phpmyadmin ne demande aucune authentification pour se connecter. C’est à dire que si je tape dans la barre d’URL 82.xxx.xxx.xxx/phpmyadmin, j’ai directement accès à toutes mes bases. Certes il n’y a pas de données très sensibles, mais j’aimerais tout de même savoir s’il y avait un moyen de se protéger un peu mieux contre ceci.

Merci encore à tous les deux pour votre précieuse aide !

EDIT: Je n’ai cependant pas utilisé Docker car je n’ai pas le temps d’approfondir le sujet, le principal pour moi étant que ça marche.

+0 -0

C’est dans le fichier config.inc.php de phpMyAdmin, il faut changer un paramètre dont je ne me rappelle évidemment plus comment il se nomme, mais il détermine la manière de se connecter, entre configuration (visiblement ton cas actuel), cookie (qui me semble être ce que tu souhaites), et d’autres trucs.

+1 -0

Ymox: Merci beaucoup, c’était exactement ça ! D’ailleurs je m’excuse parce que c’était vraiment très facile à trouver et je n’ai même pas pris la peine de chercher sur internet (ce qui n’est pas dans mes habitudes).

Merci encore à vous deux, est ce que je dois mettre le sujet en résolu d’une quelconque manière ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte