Yandex
Обновить настройки cookies

Как разрешить удаленный доступ к MySQL

Удаленный доступ к MySQL имеет большое значение для современных веб-приложений и систем управления базами данных. Он позволяет администраторам и разработчикам подключаться к серверу базы данных из любого места, что особенно удобно для работы в распределенных командах или для поддержки приложений, размещенных на облачных платформах. Правильная настройка удаленного доступа к MySQL обеспечивает гибкость и эффективность в управлении данными, а также упрощает процесс мониторинга и администрирования баз данных. Однако важно помнить, что открытие доступа к серверу может создавать потенциальные риски безопасности, если не принимать соответствующих мер предосторожности. Для того чтобы разрешить удаленный доступ к MySQL, необходимо внести изменения в конфигурационный файл MySQL. В этом файле следует изменить параметр bind-address, чтобы сервер слушал запросы не только с локального хоста, но и с других IP-адресов. Также нужно убедиться, что пользователь, которому предоставляется удаленный доступ, имеет правильные привилегии и пароль для подключения. Важно не забывать о настройке брандмауэра, чтобы разрешить подключение к нужному порту, обычно это порт 3306 для MySQL. Таким образом, правильная конфигурация удаленного доступа к MySQL является ключевым моментом для обеспечения эффективной работы с базами данных, при этом необходимо учитывать аспекты безопасности для защиты данных от несанкционированного доступа.

Конфигурационный файл MySQL

Для того, чтобы разрешить удаленный доступ, сперва нужно понять, какой конфигурационный файл MySQL используется службой. Сделать это можно несколько способами. Ниже предлагаю один из них:
mysql --help | grep /my.cnf | xargs ls 2>/dev/nullДанная команда отобразит путь к файлу, чаще всего это /etc/mysql/my.cnf. Содержимое файла имеет примерно следующий вид:
20241126_vO0AXmtB

Вместе с данным конфигурационным файлом, подгружаются и другие файлы, директория которых указана параметром includedir. Необходимо проверить наличие параметра bind-address во всех этих файлах, помимо основного /etc/mysql/my.cnf. Сделать это можно командой:
grep includedir  /etc/mysql/my.cnf | awk '{print $2}' | while read cnf
do
    grep -R bind-address ${file}
done
Пустой вывод означает, что параметр не найден. Если же параметр уже найден, то редактировать его нужно в найденном файле.

Для операционных систем Debian и Ubuntu основные параметры сервера MySQL прописываются в файле /etc/mysql/mariadb.conf.d/50-server.cnf, в котором и нужно прописать:
bind-address            = 0.0.0.0
где 0.0.0.0 указывает, что разрешено подключение с любого адреса. При необходимости можно указать и конкретный IP адрес, но советую это делать именно в параметрах пользователя MySQL.

Для применения параметров необходимо перезапустить сервис следующей командой:
systemctl restart mysql

Удаленный доступ для пользователя MySQL

Теперь нам нужно задать для существующего пользователя MySQL разрешение на подключение с нужного нам адреса. Или, как вариант, создать нового пользователя.

Меняем права пользователя MySQL

Для того, чтобы изменить пользовательский адрес подключения, можно использовать команду RENAME USER, которую нужно вводить в оболочке MySQL. В нижеизложенной команде замените username на имя вашего пользователя, а ip_address на IP-адрес клиента, из которого будет происходить подключение к серверу баз данных:
RENAME USER 'username'@'localhost' TO 'username'@'ip_address';

Создаем пользователя MySQL с удаленным доступом

Если пользователь отсутствует, создаем его. В оболочке MySQL следует выполнить SQL-команду:
CREATE USER 'username'@'ip_address' IDENTIFIED BY 'password';где password это пароль пользователя username.

После создания пользователя необходимо задать ему необходимые права доступа. Подробно данный вопрос описан в статье Создание пользователя MySQL и настройка разрешений.

Настройка файрвола (брандмауэра) для удаленного доступа MySQL

После того, как удаленный доступ был настроен в самом MySQL, следует открыть доступ в файрволе сервера. Сперва проверим какой порт слушает наш сервис баз данных:
ss -ltpn |grep -E 'mariadb|mysql'20241126_4hNQGgCx
В данном выводе 127.0.0.1 является хостом. Если мы все верно сделали ранее, хост должен быть 0.0.0.0. А 3306 это порт, на котором работает MySQL.

Давайте проверим, имеются ли вообще какие-либо запреты в брандмауэре на сервере, которым является iptables:
iptables -nL | grep policy
  • policy ACCEPT говорит о том, что по-умолчанию доступ открыт. Далее смотрим правила, имеются в них запреты. Если нет, то открывать ничего не нужно, - открыто все;
  • policy DROP - по-умолчанию доступ закрыт. Задаем разрешающее правило.
Само разрешающее правило будет иметь вид:
iptables -A INPUT -p tcp --src 1.2.3.4 --dport 3306 -j ACCEPTгде 1.2.3.4 это ваш IP адрес, который ранее мы задали для пользователя.

Это правило нужно выполнить в консоли, а также добавить в список позгружаемых правил при запуске сервера.
26 Nov 2024, 11:54:04