У меня возникла проблема с правильным подключением веб-приложения к серверу MySQL, и для ее решения я попытался закомментировать настройку bind-address
в файле my.ini
.
Это, казалось, решило проблему, однако мне было интересно, не относится ли это к безопасности. Это подходящая настройка для производственной среды, доступ к которой, конечно, ограничен пользователем / паролем? И в чем разница между закомментированием и установкой bind-address=0.0.0.0
?
Эффект от комментария параметра зависит от значения bind-address
был установлен раньше.
Добавление комментария к параметру аналогично установке его значения по умолчанию. В руководстве будет указано значение по умолчанию: https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_bind-address
bind-address
Значение по умолчанию:*
В руководстве также объясняется, что означает этот параметр и чем он отличается от использования 0.0.0.0:
Если адрес
*
, сервер принимает соединения TCP / IP на всех интерфейсах IPv4 хоста сервера и, если хост сервера поддерживает IPv6, на всех интерфейсах IPv6. Используйте этот адрес, чтобы разрешить соединения IPv4 и IPv6 на всех интерфейсах сервера. Это значение по умолчанию. Если опция задает список из нескольких значений, это значение не разрешено.Если адрес
0.0.0.0
, сервер принимает соединения TCP / IP на все интерфейсы IPv4 хоста сервера. Если опция задает список из нескольких значений, это значение не разрешено.
Если ваш сервер не защищен брандмауэром, ограничивающим доступ к TCP-порту 3306 (порт по умолчанию для MySQL), то при использовании * или 0.0.0.0 будут приниматься входящие соединения на всех IPv4-адресах, с которыми настроен сервер, а также TCP-соединения. на адресе обратной связи 127.0.0.1/8 и * дополнительно разрешит весь входящий трафик IPv6.
В целом считается хорошей практикой безопасности настраивать только минимальный доступ к сети для служб.
И *, и 0.0.0.0, вероятно, чрезмерно разрешительны во многих ситуациях, но, например, в системе, которая должна разрешать удаленный доступ к MySQL с одним интерфейсом / IP-адресом (т.е. 192.0.2.1), не будет эффективной разницы в безопасности между bind-address = 192.0.2.1
или bind-address = 0.0.0.0
или bind-address = *
На серверах, которым не нужно разрешать удаленный доступ к MySQL (типичный сервер LAMP) bind-address = ::ffff:127.0.0.1
будет рекомендовано.
Говоря о безопасности, раскрытие ваших данных миру - никогда не лучший выбор.
Говоря о том, как избежать того, что вы сделали, если ваш MySQL работает в Linux и у вас есть доступ по SSH, вы можете настроить туннель и не нужно открывать MySQL всему миру.
Вот пример:
ssh -v -N -o ExitOnForwardFailure=yes -o ConnectTimeout=10 -o NumberOfPasswordPrompts=3 \
-i ~/.ssh/yourkey.pem -o TCPKeepAlive=no -o ServerAliveInterval=60 \
-o ServerAliveCountMax=1 \
youruser@yourhost.com -L 3306:127.0.0.1:3306
Таким образом, вы подключаете свой графический интерфейс или любое другое приложение, которое вам нужно подключить, к порту 3306 IP 127.0.0.1, и все готово.
Если вы не хотите использовать командную строку, вы можете настроить большую часть графического интерфейса для подключения MySQL через туннель SSH.
Наконец, если вы комментируете bind-address=0.0.0.0
пусть ваш mysql прослушивает соединения через все IP-адреса, а не только на localhost
(127.0.0.1)