Yandex
Обновяване на предпочитанията за бисквитки

Как да разрешим отдалечен достъп до 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.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 е паролата на потребителското име.

След като създадете потребител, е необходимо да му дадете необходимите права за достъп. Този въпрос е описан подробно в статията Създаване на потребител на MySQL и задаване на разрешения.

Конфигуриране на файрвола за отдалечен достъп до MySQL

След като отдалеченият достъп е конфигуриран в самата MySQL, трябва да отворите достъпа в файрвола на сървъра. Първо нека проверим на кой порт слуша нашата услуга за бази данни:
ss -ltpn |grep -E 'mariadb|mysql'20241126_4hNQGgCx
В този изход 127.0.0.1 е хостът. Ако сме направили всичко правилно по-рано, хостът трябва да е 0.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