IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

Problème d'accès à une base MariaDB depuis une image Docker


Sujet :

MySQL

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut Problème d'accès à une base MariaDB depuis une image Docker
    Hello,

    Je tente d'héberger un site perso en Java sur mon NAS Synology DS223 qui tourne sous DSM7.2. Pour cela j'utilise Container Manager qui permet de monter des images Docker et MariaDB pour la base de données.
    Mon problème est le suivant : j'ai un compte root sur MariaDB dont j'ai défini le mot de passe. Pour des raisons de sécurité et parce qu'à terme je vais créer plusieurs bases de données sur MariaDB, je voudrais configurer un compte utilisateur pour mon application Java qui tourne sous Docker.

    J'ai donc créé un compte nominatif avec les commandes suivantes, connecté en root sur la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE USER 'monutilisateur'@'localhost' IDENTIFIED BY '<password>';
    GRANT ALL PRIVILEGES ON mabase.* TO 'monutilisateur'@'localhost' IDENTIFIED BY '<password>';
    J'y accède bien avec un client MariaDB en tant que monutilisateur depuis mon PC sur le réseau local.

    Mais ça ne fonctionne pas pour mon site.

    Si j'utilise le compte root, mon application démarre correctement et accède bien à la base.
    Voici la configuration associée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    spring:
      datasource:
        driverClass: org.mariadb.jdbc.Driver
        url: jdbc:mariadb://192.168.1.49:3306/cure?autoReconnect=false&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=Europe/Paris
        username: root
        password: <password>
    Dans les logs, je n'ai pas d'erreur :

    2024-10-30 10:24:39 [main] INFO org.flywaydb.core.FlywayExecutor:line - Database: jdbc:mariadb://192.168.1.49/ (MariaDB 10.11)
    Par contre si je configure l'application de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    spring:
      datasource:
        driverClass: org.mariadb.jdbc.Driver
        url: jdbc:mariadb://192.168.1.49:3306/cure?autoReconnect=false&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=Europe/Paris
        username: monutilisateur
        password: <password>
    J'ai le message d'erreur suivant, qui n'est pas du tout clair :

    SQL State : 28000
    Error Code : 1045
    Message : (conn=10) Access denied for user 'root'@'172.17.0.2' (using password: YES)
    Je ne comprends pas pourquoi il indique root alors que je tente en monutilisateur ni à quoi correspond l'IP 172.17.0.2, qui n'est ni sur mon réseau local, ni bien sûr mon IP publique... Le mot de passe est évidemment correct.

    Par acquis de conscience, j'ai fait un test avec une IP bidon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    spring:
      datasource:
        driverClass: org.mariadb.jdbc.Driver
        url: jdbc:mariadb://192.168.1.50:3306/cure?autoReconnect=false&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=Europe/Paris
        username: root
        password: <password>
    J'obtiens l'erreur suivante, ce qui est plutôt logique :
    SQL State : 08000
    Error Code : 0
    Message : Socket fail to connect to host:address=(host=192.168.1.50)(port=3306)(type=primary). No route to host
    Est-ce qu'une âme charitable aurait une idée de ce qu'il se passe ici ?

    Merci pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 952
    Par défaut
    Citation Envoyé par Shuret Voir le message
    Pour cela j'utilise Container Manager qui permet de monter des images Docker et MariaDB pour la base de données.
    Citation Envoyé par Shuret Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE USER 'monutilisateur'@'localhost' IDENTIFIED BY '<password>';
    GRANT ALL PRIVILEGES ON mabase.* TO 'monutilisateur'@'localhost' IDENTIFIED BY '<password>';
    Citation Envoyé par Shuret Voir le message
    Je ne comprends pas pourquoi il indique root alors que je tente en monutilisateur ni à quoi correspond l'IP 172.17.0.2, qui n'est ni sur mon réseau local, ni bien sûr mon IP publique...
    Bon, en premier lieu une adresse 172.17.0.0 est une des adresses de classe B privées ; comme les 192.168.*.0
    https://fr.wikipedia.org/wiki/R%C3%A9seau_priv%C3%A9


    Quelles sont les adresses Ip des différentes images Docker ?

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Merci pour ta réponse !

    Effectivement il s'agit bien de l'adresse IP de l'image Docker qui est montée. Je n'ai qu'une seule image Docker, la base de données n'est pas sous forme d'image mais de paquet Synology.

    Je pense que ça peut venir de la configuration en bridge de l'image. Je vais faire quelques tests.

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    J'ai fait différents tests mais aucun ne fonctionne. Je ne comprends pas quelle est le combo configuration réseau dans Docker + création de l'utilisateur MariaDB + grants de cet utilisateur + configuration de mon application à utiliser pour que ça fonctionne...

    N'hésitez pas à poser des questions si vous avez besoin de plus de détails...

  5. #5
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 952
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE USER 'monutilisateur'@'%' IDENTIFIED BY '<password>';
    https://dev.mysql.com/doc/refman/8.4...unt-names.html

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Hello,

    Bon ben j'ai retourné le truc dans tous les sens et je n'y arrive pas.

    J'ai testé les configuration user/grants suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE USER 'monutilisateur'@'%' IDENTIFIED BY '<password>';
    GRANT ALL PRIVILEGES ON mabase.* TO 'monutilisateur'@'%' IDENTIFIED BY '<password>';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE USER 'monutilisateur'@'172.17.0.0/16' IDENTIFIED BY '<password>';
    GRANT ALL PRIVILEGES ON mabase.* TO 'monutilisateur'@'172.17.0.0/16' IDENTIFIED BY '<password>';
    Et j'ai toujours la même erreur :

    Access denied for user 'root'@'172.17.0.2' (using password: YES)
    Alors que je me connecte avec l'uilisateur monutilisateur...

    Je suis perdu

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 807
    Par défaut
    Voici un exemple que j'applique chez moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DROP   USER  IF EXISTS                                              'base'@'%';
    CREATE USER                                                         'base'@'%'           IDENTIFIED BY 'base';
    GRANT  USAGE                          ON            *.* TO          'base'@'%';
    GRANT  SELECT, INSERT, UPDATE, DELETE ON       `base`.* TO          'base'@'%';
    GRANT  SELECT, INSERT, UPDATE, DELETE ON `phpmyadmin`.* TO          'base'@'%';
    % signifie n'importe qui, que ce soit localhost ou bien depuis internet.
    Ici, le compte "base" accède à la base de données du même nom "base".

    Citation Envoyé par Shuret
    J'y accède bien avec un client MariaDB en tant que monutilisateur depuis mon PC sur le réseau local.
    Oui, mais vous êtes en localhost.

    Citation Envoyé par Shuret
    Mais ça ne fonctionne pas pour mon site.
    Parce que vous n'êtes plus en localhost.
    Cette adresse IP "192.168.1.49" n'est pas du localhost, n'est-ce pas.

    Citation Envoyé par Shuret
    Par contre si je configure l'application de la manière suivante :
    Vous demandez un accès à votre site qui se trouve à l'adresse "192.168.1.49", avec un compte qui est autorisé à fonctionner seulement en localost.
    Il est normal que cela ne fonctionne pas.

    Citation Envoyé par Shuret
    Je ne comprends pas pourquoi il indique root alors que je tente en monutilisateur ni à quoi correspond l'IP 172.17.0.2, qui n'est ni sur mon réseau local, ni bien sûr mon IP publique... Le mot de passe est évidemment correct.
    Il est difficile de vous répondre avec aussi peu d'informations que vous nous communiquez.

    D'où sort l'adresse IP 172.17.0.2 . C'est une adresse local appartenant à "176.16.0.0/12", comme "192.168.0.0/16" ou "10.0.0.0/8".
    si MySql vous l'affiche, elle doit bien exister quelque part, peut être dans la table des "user", là où vous avez entré votre compte "monutilisateur".

    Citation Envoyé par Shuret
    J'obtiens l'erreur suivante, ce qui est plutôt logique :
    Pour résoudre votre problème, vous devez définir :
    a) un accès depuis l'internet à votre site. Il faut pour cela ouvrir les ports 80 & 443 dans votre box vers votre site WEB qui doit avoir une adresse du genre "192.168.1.x". "x" désignant l'adresse ip où se trouve votre serveur WEB.

    b) ne pas oublier de créer des règles dans votre pare-feu pour laisser passer ce flux venant d'internet vers Apache et MySql.

    c) définir un compte utilisateur dans MySql, soit en mettant "%" qui désigne l'adresse de l'émetteur, et signifie tout le monde, où bien si vous le faite depuis votre ordinateur, vous mettez votre adresse IP "192.168.1.y" qui n'est pas celle de votre serveur WEB.

    d) si vous utilisez des adresses "127.0.0.0/8" de type localhost vous serez contraints de vous connecter depuis le serveur WEB.

    e) est-ce que depuis l'ordinateur où vous vous trouvez, arrivez vous à faire un ping vers votre serveur WEB ?

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Bon, vous voulez rigoler ?

    Le problème venait de ma configuration Flyway, qui est exécuté au lancement de la webapp. J'avais mis username (comme la conf MariaDB) au lieu de user. C'est pour cela qu'il se connectait en root alors que je lui spécifiais un user différent...

    Bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    spring:
      datasource:
        driverClassName: org.mariadb.jdbc.Driver
        url: jdbc:mariadb://192.168.1.49:3306/mabase?autoReconnect=false&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=Europe/Paris
        username: monutilisateur
        password: <password>
      flyway:
        url: jdbc:mariadb://192.168.1.49:3306
        user: monutilisateur
        password: <password>
        schemas: mabase
    Pas bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    spring:
      datasource:
        driverClassName: org.mariadb.jdbc.Driver
        url: jdbc:mariadb://192.168.1.49:3306/mabase?autoReconnect=false&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=Europe/Paris
        username: monutilisateur
        password: <password>
      flyway:
        url: jdbc:mariadb://192.168.1.49:3306
        username: monutilisateur
        password: <password>
        schemas: mabase
    Du coup j'ai créé l'utilisateur ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE USER 'monutilisateur'@'172.17.0.%' IDENTIFIED BY '<password>';
    GRANT USAGE ON `mabase`.* TO 'monutilisateur'@'172.17.0.%';
    GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, ALTER ON `mabase`.* TO 'monutilisateur'@'172.17.0.%';
    Et tout fonctionne. Comme quoi le problème était vraiment entre la chaise et le clavier...

    Merci pour votre aide et désolé pour le dérangement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Installation de packages R dans une image Docker
    Par Grasshoper dans le forum R
    Réponses: 1
    Dernier message: 20/10/2023, 09h21
  2. Créer une image docker depuis un projet dotnet core
    Par shenron666 dans le forum Docker
    Réponses: 1
    Dernier message: 28/06/2023, 23h58
  3. Réponses: 0
    Dernier message: 31/12/2021, 01h02
  4. Réponses: 8
    Dernier message: 19/02/2019, 08h43
  5. Réponses: 4
    Dernier message: 15/03/2006, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo