Quelle est la qualité de la définition de bind-address de MySQL sur 0.0.0.0?

35

J'essaie d'autoriser un serveur distant à accéder à une instance MySQL qui partage actuellement un serveur Linux avec une application Web. Selon la documentation, le seul moyen possible (sauf si je ne comprends pas bien) si la directive bind-address est définie sur 0.0.0.0 , ce qui permet à MySQL de permettre l'accès depuis n'importe quelle adresse IP pouvant générer un utilisateur valide.

Donc, deux questions:

  1. à quel point cela serait-il nuisible à la sécurité?
  2. Existe-t-il une meilleure approche pour permettre une interaction locale et à distance avec MySQL?
Jonathanatx
la source

Réponses:

36

Je pense que vous comprenez un peu le paramètre bind-address . Ce sont les adresses locales que MySQL écoutera pour les connexions. La valeur par défaut est 0.0.0.0, c'est-à-dire toutes les interfaces. Ce paramètre ne limite pas les adresses IP pouvant accéder au serveur, sauf si vous avez spécifié 127.0.0.1 pour localhost uniquement.

Si vous avez besoin de restreindre certains utilisateurs à partir d'adresses IP spécifiques, utilisez créer / accorder un utilisateur comme ceciCREATE USER 'bobdole'@'192.168.10.221';

Doug Luxem
la source
+1, mais notez simplement que l'adresse d'écoute par défaut varie en fonction de l'installation de MySQL.
John Gardeniers
Merci Doug, je pense que la configuration par défaut dans mon cas était mon hôte local, mais il est bon de savoir que les utilisateurs d'une base de données particulière sont toujours limités par IP.
jonathanatx
@jonathanatx MySQL bind-address par défaut (en 5.6 et autant que je sache) est 0.0.0.0. Cependant, je pense que pour de nombreuses installations, seule la liaison locale est la meilleure option. N'ouvrez pas la porte si vous ne voulez pas que quelqu'un la traverse.
ebyrob
1

une. C'est mauvais. Même si vous pouvez limiter l'accès des utilisateurs par ip sur chaque base de données, je pense qu'il est plus sûr que toutes les connexions arrivent localement. Sur mes serveurs, j'autorise MySQL à n'accepter que les connexions locales, 127.0.0.1, comme c'est la configuration par défaut. Pour accéder à la base de données à distance, il vous suffit de créer un tunnel ssh avant de vous connecter à la base de données, puis de vous connecter localement. Si vous codez avec php, il est très facile de le faire. Si vous utilisez une application de bureau, il est facile de le faire sous Linux (rechercher un tunnel ssh). Sous Windows, j'utilise normalement un programme comme Putty pour créer le tunnel à ma place.

Jayson Just
la source
7
C'est assez fou. La méthode standard consiste à créer des utilisateurs accessibles uniquement à partir de certains noms d’hôte ou adresses IP. Forcer chaque serveur Web à créer un tunnel SSH vers une base de données représente un travail bien plus fastidieux que nécessaire.
TheLQ
3
Votre serveur Web et votre serveur de base de données ne sont pas toujours le même appareil. Évidemment, ne laissez pas les connexions entrer par Internet, mais il existe des moyens sûrs de concevoir des solutions avec un accès réseau MySQL.
Shane Madden
1
Pour une petite configuration (une base de données, un site Web), vous pouvez créer un tunnel ssh. Pour une configuration réelle, vos vpns et vos pare-feu vous protégeraient. Par conséquent, vous devriez vous ouvrir via 0.0.0.0 pour autoriser l'accès à distance.
Sonia Hamilton
2
Pour tous ceux qui pensent que le tunnel SSH est une idée folle, considérons que l’essentiel du trafic MySQL est en clair. Si, pour une raison quelconque, vous devez vous connecter via un réseau non sécurisé (Internet), envisagez SSH ou connectez-vous via un VPN. Lancez Wireshark ou un autre renifleur de paquets si vous voulez voir de quoi je parle.
Brad
2
@Brad MySQL supporte le cryptage donc ce n'est pas correct.
Marti Markov