cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

En général il y a deux façons de se connecter à une base de donnée :

  • soit on fait cela Ă  travers les « sockets UNIX »,
  • soit on fait cela Ă  travers les « sockets TCP/IP ».

Ici, on va regarder comment se connecter Ă  une base de donnĂ©e MariaDB (MySQL) depuis une autre machine et cela nĂ©cessite d’utiliser les « sockets TCP/IP ».


ඏ

Préalable pour cet article : « sockets UNIX » versus « sockets TCP/IP »

  • « sockets UNIX » versus « sockets TCP/IP »

    Un socket UNIX, (AKA Unix Domain Socket), est un mĂ©canisme de communication inter-processus qui permet un Ă©change de donnĂ©es bidirectionnel entre des processus exĂ©cutĂ©s sur la mĂȘme machine.

    Les sockets IP (en particulier les sockets TCP/IP) sont un mĂ©canisme permettant la communication entre processus sur le rĂ©seau. Dans certains cas, vous pouvez utiliser des sockets TCP/IP pour communiquer avec des processus exĂ©cutĂ©s sur le mĂȘme ordinateur (en utilisant l’interface de bouclage).

    Les sockets de domaine UNIX savent qu’ils s’exĂ©cutent sur le mĂȘme systĂšme, ils peuvent donc Ă©viter certaines vĂ©rifications et opĂ©rations (comme le routage) ; ce qui les rend plus rapides et plus lĂ©gers que les sockets IP.

    Donc, si vous prĂ©voyez de communiquer avec des processus sur le mĂȘme hĂŽte, c’est une meilleure option que les sockets IP.

    Notez que les sockets de domaine UNIX :

    • sont soumises aux autorisations du systĂšme de fichiers, tandis que les sockets TCP ne peuvent ĂȘtre contrĂŽlĂ©s qu’au niveau du filtre de paquets.
    • ne peuvent pas ĂȘtre partagĂ©es via NFS, SAMBA, ou SSHFS (le fichier qui est utilisĂ© pour les Ă©changes est d’un type bien spĂ©cifique, considĂ©rez que ce n’est mĂȘme pas un fichier – pas de copie, pas de sauvegarde possible).

ඏ

Préalable pour cet article : « MariaDB » versus « MySQL »

  • « MariaDB » versus « MySQL »

    Dans le dĂ©veloppement de sites Web, une base de donnĂ©es joue un rĂŽle essentiel dans le stockage et la gestion des donnĂ©es, un rĂŽle parfois trop important d’ailleurs, mais c’est un autre sujet.

    L’une des bases de donnĂ©es les plus populaires est MySQL et qui temps Ă  ĂȘtre remplacĂ©e par sa successeure MariaDB.

    Malgré une structure similaire, les deux systÚmes de gestion de bases de données relationnelles présentent des caractéristiques et des éléments différents.

    La principale différence entre MariaDB et MySQL est que MariaDB est complÚtement open-source et est globalement plus rapide que MySQL grùce à un plus grand nombre de moteurs de stockage et un pool de connexion plus important.

    Notez que cependant, MySQL supporte le masquage des donnĂ©es et les colonnes dynamiques, ce qui n’est pas le cas de MariaDB.

    Sur les fonctionnalités, les deux bases de données sont assez semblables.

    • Sur Debian et ces dĂ©rivĂ©s le paquet MySQL utilise depuis plusieurs annĂ©es le moteur MariaDB, c’est donc probablement le moteur de MariaDB que vous utilisez dĂ©jĂ . Les paquets MySQL semblent disparaĂźtre au profit de MariaDB, il y a donc une migration Ă  prĂ©voir pour passer sur les paquets MariaDB natif et il faudra prendre l’habitude d’utiliser les commandes MariaDB au lieu de celle de MySQL.
    • MySQL, aujourd’hui, tant Ă  ĂȘtre rĂ©servĂ© aux professionnels (notion de support et de personnalisation du code).

    Notez que bien que le code de MariaDB soit complĂštement open-source, il reste principalement maintenu par Oracle. L’outillage Oracle pour MySQL n’est pas censĂ© fonctionner avec MariaDB, mais pour un usage limitĂ© (en amateur Ă©clairĂ©, disons) ça marche (encore).

    Les désavantages de MariaDB :

    • MariaDB n’est pas encore 100 % compatible avec MySQL, mais les deux supportent le mĂȘme sous-langage SQL.
    • Sa mise en cache n’est pas efficace pour traiter les trĂšs grosses transactions.
    • Son support coĂ»te cher, principalement du fait du manque de compĂ©tences.
    • La version cluster de MariaDB n’est pas stable Ă  ce jour.

Dans la suite de cet article, on prĂ©suppose que la base de donnĂ©e est dĂ©jĂ  configurĂ©e pour utiliser TCP/IP et qu’elle a dĂ©jĂ  un utilisateur avec les droits appropriĂ©s Ă  vos besoins, ou que vous avez laissĂ© la base de test.

En gros, on présuppose une installation assez standard, pas trop bricolée.


ඏ

Tests depuis le serveur MariaDB

Depuis la machine oĂč se trouve la base de donnĂ©e.

Si vous n’avez pas supprimĂ© la base de test et pas protĂ©gĂ© votre base de donnĂ©e, vous pouvez l’utiliser pour tester votre configuration.

mariadb --host=localhost --protocol=tcp --port=3306 test

sinon, il faut que vous ayez un utilisateur qui existe déjà (comment le créer ne fait pas partie de ce billet) :

mariadb --host=localhost --protocol=tcp --port=3306 --user='votre_user' --password='votre_mot_de_passe'

Notez que localhost indique que l’on utilise la boucle locale, la ligne prĂ©cĂ©dente est Ă©quivalente à :

mariadb --host='127.0.0.1' --protocol=tcp --port=3306 --user='votre_user' --password='votre_mot_de_passe'

Mais si vous utiliser l’adresse IP de votre base de donnĂ©e, vous devrez Ă©crire quelque chose comme :

mariadb --host='192.168.1.89' --protocol=tcp --port=3306 --user='votre_user'--password='votre_mot_de_passe'

Si là vous avez une erreur de connexion, c’est votre configuration se limite à la boucle locale.

Pour vous aider à localiser la configuration, vous pouvez utiliser quelque chose comme :

cd /etc/mysql ; sudo grep -R 'bind-address'

Avec les derniÚres versions de MariaDB, cela devrait se situer dans :

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

Et vous devrez remplacer la ligne :

bind-address            = 127.0.0.1

Par la ligne :

bind-address            = 0.0.0.0

Pensez ensuite à reconfigurer le service et le redémarrer :

sudo systemctl daemon-reload
sudo systemctl restart mariadb.service

Et cette fois la ligne suivante devrait fonctionner :

mariadb --host='192.168.1.89' --protocol=tcp --port=3306 --user='votre_user'--password='votre_mot_de_passe'

On va maintenant pouvoir tester depuis une autre machine.


ඏ

Tests depuis une autre machine

mariadb --host='192.168.1.89' --protocol=tcp --port=3306 --user='votre_user'--password='votre_mot_de_passe'

Si la connexion ne fonctionne pas, cette fois c’est du cĂŽtĂ© de l’utilisateur qu’il faut chercher.

On va rechercher un utilisateur qui a le droit d’accĂ©der Ă  la base de donnĂ©e.

Regardons la configuration des utilisateurs (à faire sur le serveur hébergeant MariaDB) :

sudo mariadb -e "SELECT User, Host FROM mysql.user;"

ou mieux encore (pour n’afficher que les utilisateurs qui ne sont pas limitĂ©s Ă  un accĂšs local) :

sudo mariadb -e "SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';"

Vous obtiendrez quelque chose comme :

+------------------------+------+
| User                   | Host |
+------------------------+------+
| kodi                   | %    |
| sql_nc101_201909_admin | %    |
+------------------------+------+
+----------------+-----------+
| User           | Host      |
+----------------+-----------+
| mariadb.sys    | localhost |
| mysql          | localhost |
| phpmyadmin     | localhost |
| piwigo_db_user | localhost |
| root           | localhost |
+----------------+-----------+

Si vous vous trouvez dans le second cas de figure, vous devrez modifier la configuration d’un des utilisateurs ou en crĂ©er un nouveau avec plus de droits.


ඏ

Exposition de la base de donnée sur internet (derriÚre une box en mode routeur)

Je ne pense pas que ce soit une bonne idĂ©e d’exposer une base de donnĂ©e directement sur Internet, mais disons que si pour des raisons particuliĂšres vous souhaitez le faire, voici comment mettre cela en Ɠuvre.

Préliminaires et cadrage :

  • Il faut que votre box est une adresse IPv4,
  • Il est prĂ©fĂ©rable que votre box vous propose une pile IP complĂštes (de plus souvent votre fournisseur d’accĂšs internet ne vous donnera qu’une demi-pile IP lorsque vous ĂȘtes en IPv4),
  • Il faut que votre box soit en mode routeur (NAT) (et surtout pas en mode bridge).

Vous devrait identifier l’adresse IP du serveur sur le rĂ©seau local de la base de donnĂ©e (cela a forcĂ©ment Ă©tĂ© fait si vous avez fait les tests ci-dessus).

Vous aurez besoin du port d’écoute de la base de donnĂ©e (par dĂ©faut pour MariaDB c’est le port 3306)

Voici les informations que vous devrez remplir :

  • Protocole : tcp
  • RĂ©seau local :
    • « Lan IP » = IP de destination = IP Locale : dans notre exemple c’est 192.168.1.89
    • « Lan Port » = Port de destination = Port local : dans notre cas c’est 3306
  • Internet (Wan) :
    • « Wan IP » = IP source : Comme n’importe qui peut venir sur cette base de donnĂ©e, la rĂ©ponse est Toutes ou 0.0.0.0 (ou quelque chose dans ce sens)
    • « Wan Port » = Port externe (dans certain cas vous aurez Ă  prĂ©ciser un range), vous devrez choisir un numĂ©ro de port, par exemple 13306. Pour limiter les attaques, Ă©viter d’utiliser des ports classiques et rĂ©servĂ© Ă  l’administration. ConcrĂštement prenez un numĂ©ro supĂ©rieur Ă  1024 et infĂ©rieur Ă  65535 (attention dans le cas oĂč vous n’avez qu’une demi-pile IP).
{
  "ip_proto": "tcp",
  "lan_ip": "192.168.1.89",
  "lan_port": 3306,
  "src_ip": "0.0.0.0",
  "wan_port_end": 13306,
  "wan_port_start": 13306
}

ඏ

Retrouver le port d’une instance MariaDB

Pour une installation standard, vous pourrez trouver le port à l’aide de :

cd /etc/mysql ; sudo grep -R 'port'

Par défaut MariaDB et MySQL écoute sur le port 3306.


ඏ

 On parle de sockets UNIX avec MariaDB

Pour rechercher la configuration permettant de communiquer en utilisant les sockets UNIX, vous pouvez utiliser :

cd /etc/mysql ; sudo grep -R 'socket'

On recherche typiquement une ligne du type :

socket = /run/mysqld/mysqld.sock

C’est le fichier /run/mysqld/mysqld.sock qui servira aux Ă©changes entre la base de donnĂ©e et les clients.

Notez que ce fichier n’est pas un fichier standard :

stat /run/mysqld/mysqld.sock
  File: /run/mysqld/mysqld.sock
  Size: 0           Blocks: 0          IO Block: 4096   socket <===== Sur un fichier classique, on aurait 'regular file'
Device: 15h/21d Inode: 641         Links: 1
Access: (0777/srwxrwxrwx)  Uid: (  111/   mysql)   Gid: (  117/   mysql)
Access: 2023-03-10 12:11:29.321928350 +0100
Modify: 2023-02-27 22:42:47.923999980 +0100
Change: 2023-02-27 22:42:47.923999980 +0100
 Birth: -

ඏ

Liens

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog