Как да разрешите отдалечени връзки към MySQL

Ако работите с MySQL база данни(MySQL database) , тогава вече сте наясно с предизвикателствата, пред които се сблъсквате, за да поддържате вашата база данни защитена. От опити за хакване на база данни с помощта на SQL инжекции до атаки с груба сила, е трудно да запазите данните си в безопасност, особено ако работите с база данни от разстояние.

Има начини да конфигурирате SQL сървър да позволява отдалечени връзки, но трябва да внимавате, тъй като разрешаването на отдалечени връзки на MySQL сървър може да направи вашата база данни лесна мишена за хакери. Ако искате да разрешите сигурни, отдалечени връзки към MySQL база данни, ето какво ще трябва да знаете.

Преди да започнеш(Before You Begin)

Преди да направите каквито и да е промени във вашата MySQL база данни, важно е да направите резервно копие на вашата база данни(backup your database) , особено ако работите на производствен сървър (сървър в активно използване). Всички промени, които правите във вашата база данни или сървъра, който я хоства, може да доведе до сериозна загуба на данни, ако нещо се обърка.

Може също да откриете, че промените във връзките на вашия сървър може да ви попречат на достъпа до него след това. Ако това се случи, може да се наложи да се консултирате с администратор на сървъра за допълнителна поддръжка. Добра идея е да изпробвате всички промени на локално управляван MySQL сървър, за да проверите дали промените работят, преди да ги изпробвате дистанционно.

Също така е вероятно, ако правите промени в отдалечен сървър, ще ви е необходим безопасен начин за свързване и извършване на промени. SSH (Secure Shell) често е най-добрият начин да направите това, тъй като ви позволява да се свържете с вашия отдалечен сървър. Можете също да използвате SSH за свързване със сървъри във вашата локална мрежа, като тези, хоствани на Raspberry Pi(hosted on a Raspberry Pi) .

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

Да предположим(Suppose) , че нямате отдалечен достъп до вашия сървър чрез SSH (например). В този случай няма да можете да конфигурирате вашата MySQL база данни да разрешава отдалечени връзки директно, освен ако вашият root mySQL акаунт вече позволява отдалечени връзки. Така че ще трябва първо да установите тази връзка, преди да можете да продължите.

Редактиране на вашия MySQL конфигурационен файл(Editing Your MySQL Configuration File)

Първата стъпка в конфигурирането на MySQL за разрешаване на отдалечени връзки е да редактирате вашия конфигурационен файл на MySQL . До този етап това ръководство ще приеме, че вече сте се свързали със сървъра, компютъра или Mac , който хоства вашата mySQL база данни от разстояние и имате достъп до конзолата. 

Като алтернатива можете да конфигурирате локален MySQL сървър, като използвате отворен терминал на Mac или Linux или текстов редактор на Windows .

  1. За да започнете, използвайте предпочитания от вас конзолен текстов редактор, за да редактирате вашия файл с база данни MySQL . В Linux въведете sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf в терминал или прозорец на SSH , за да редактирате този файл с помощта на nano редактора (ако приемем, че вашата MySQL база данни е в местоположението по подразбиране)

  1. Ако използвате Windows , отворете File Explorer и влезте в папката, съдържаща вашата MySQL инсталация (напр. C:/Program Files/MySQL/MySQL Server 8.0 ). Отворете файла my.ini с вашия текстов редактор по подразбиране (напр. Notepad ), като щракнете двукратно върху записа. Ако го няма, първо създайте файла(create the file first) .

  1. На Mac отворете терминален прозорец и въведете sudo nano /usr/local/etc/my.cnf . Това е конфигурационният файл по подразбиране за MySQL , ако сте инсталирали MySQL с помощта на homebrew(using homebrew) .

Местоположенията, посочени по-горе, са местоположенията по подразбиране за конфигурационните файлове на MySQL . Ако тези команди не работят, ще трябва ръчно да потърсите съответните файлове ( my.cnf , mysqld.cnf или my.ini ), за да намерите съответния път на файла.

Задаване на диапазон на безопасни адреси за свързване(Setting a Safe Bind-Address IP Range)

  1. След като отворите конфигурационния файл на MySQL за вашия сървър, използвайте клавиша със стрелка на клавиатурата, за да стигнете до секцията за адрес на свързване(bind-address) на файла. Този диапазон на IP ограничава връзките към вашата база данни, която обикновено е настроена да позволява връзки само от локалната машина или сървър, използвайки 127.0.0.1 .

  1. Ако искате да конфигурирате вашата база данни MySQL да позволява връзки от устройства, използващи текущата ви интернет връзка, първо намерете публичния си IP адрес(find your public IP address) , след което заменете 127.0.0.1 с този IP адрес. Като алтернатива го заменете с IP адрес за устройството или сървъра, от който искате да разрешите връзки.

  1. При някои обстоятелства може да пожелаете да разрешите всички(all) отдалечени връзки към MySQL база данни. Това крие изключителен риск(extreme risk) и не трябва да се използва на производствен сървър. Ако искате да разрешите това обаче, заменете 127.0.0.1 с 0.0.0.0 .

  1. Отбележете стойността на порта(port ) в секцията Основни настройки(Basic Settings) . Това ще се изисква в следващия раздел. Ако не се вижда, ще се използва стойността по подразбиране, която е порт 3306 . Можете да добавите свой собствен порт, като напишете port = xxxx на нов ред, като замените xxxx с подходяща стойност на порта.

  1. След като конфигурирате адреса за свързване(bind-address ) във вашия конфигурационен файл на MySQL , запазете файла. Ако сте на Linux , изберете Ctrl + O и Ctrl + X , за да направите това. На Mac изберете Command + O и Command + X . Потребителите на Windows могат да запазят, като изберат Файл(File ) > Запиши(Save) .

  1. След това потребителите на Linux и Mac могат да рестартират MySQL , като напишат mysql.server stop && mysql.server start или mysql.server restart . Може да се наложи да повишите командата с помощта на sudo(using sudo) (напр. sudo mysql.server restart ) и да използвате подходящия път до файла mysql.server (напр. /usr/local/bin/mysql.server ).

  1.  Ако горната команда не работи, опитайте вместо това да рестартирате sudo service mysql .(sudo service mysql restart )

  1. За да рестартирате MySQL на Windows , отворете нов прозорец на PowerShell , като щракнете с десния бутон върху менюто " Старт(Start) " и изберете Windows PowerShell (Администратор)(Windows PowerShell (Admin)) . В прозореца на PowerShell въведете net stop mysql80, последвано от net start mysql80 , като замените mysql80 с правилното име на услугата на вашия компютър.

Ако не сте сигурни в правилното име на услугата в Windows , въведете net start , за да го намерите. Ако не можете да презаредите конфигурацията си, рестартирайте сървъра си и вместо това презаредете MySQL ръчно (ако е необходимо).

Конфигуриране на вашите защитни стени(Configuring Your Firewalls)

На този етап вашата база данни MySQL трябва да позволява отдалечени връзки от устройства, използващи IP адреса, който сте задали като стойност на адрес за свързване(bind-address) във вашия конфигурационен файл на MySQL (или от всички устройства, ако вместо това зададете тази стойност на 0.0.0.0 ). Връзките обаче пак ще бъдат блокирани от вашето устройство или мрежова защитна стена(device or network firewall) .

Повечето сървъри и компютри използват защитна стена за блокиране на връзки, освен ако не е предоставен достъп до конкретен порт. Стъпките за конфигуриране на това ще варират в зависимост от това дали използвате MySQL на Windows или Linux . Защитните стени на Mac(Mac) са деактивирани по подразбиране, така че не трябва да извършвате допълнителни стъпки тук.

Конфигуриране на защитни стени на Linux(Configure Linux Firewalls)

Много Linux сървъри използват iptables като помощна програма за защитна стена по подразбиране. Можете да го конфигурирате, като следвате стъпките по-долу.

  1. Отворете терминал или SSH връзка и въведете sudo iptables -A INPUT -p tcp -s XXXX –dport YYYY -j ACCEPT . Заменете XXXX с IP адреса на устройството, от което искате да разрешите MySQL връзки ,(from) и заменете YYYY със съответстващата стойност на порта от вашия конфигурационен файл на MySQL (напр. 3306 ).

  1. Това ще конфигурира временно защитната стена. Ако използвате Linux сървър, базиран на Debian или Ubuntu, направете тази промяна постоянна, като напишете sudo netfilter-persistent save и sudo netfilter-persistent reload в прозореца на терминала или SSH.

Ако iptables не е инструментът за защитна стена по подразбиране за вашата Linux дистрибуция, ще трябва да се консултирате с ръководството за потребителя на вашата дистрибуция за повече информация. Ако определени пакети (като netfilter-persistent ) са недостъпни, използвайте инструмента за софтуерно хранилище на вашата дистрибуция, за да го инсталирате (напр. sudo apt install netfilter-persistent ).

Конфигуриране на защитни стени на Windows(Configure Windows Firewalls)

Ако използвате компютър с Windows или сървър за хостване на вашата база данни, можете да конфигурирате защитната си стена, като използвате следните стъпки:

  1. Щракнете с десния бутон(Right-click) върху менюто " Старт(Start) " и изберете "Изпълни"(Run) .

  1. В полето Run въведете wf.msc и изберете OK .

  1. В прозореца на Windows Defender изберете Входящи правила(Inbound Rules ) > Ново правило(New Rule) .

  1. В прозореца на съветника за ново входящо правило(New Inbound Rule Wizard) изберете Порт(Port ) > Следващ(Next) .

  1. В следващото меню изберете TCP от опциите, въведете 3306 (или която и да е стойност на порта, посочена в конфигурационния ви файл на MySQL ), след това изберете Напред(Next) .

  1. В менюто Действие(Action) оставете опцията по подразбиране Разрешаване на връзката(Allow the connection) , след което изберете Напред(Next) .

  1. Потвърдете, че искате правилото да се прилага към всички типове мрежи, след което изберете Напред(Next)

  1. Въведете описателно име за правилото (напр. MySQL ) в предоставения порт, след което изберете Готово(Finish) , за да го добавите към вашия списък с правила на защитната стена.

Ако имате проблеми със свързването, повторете тези стъпки по-горе, като се уверите, че сте създали ново изходящо правило(outbound rule ) в настройките на защитната си стена, като използвате същите данни (порт 3306 и т.н.). Може също да се наложи да конфигурирате вашия локален мрежов рутер да отваря необходимите блокирани портове(open the necessary blocked ports) , за да позволи входящи и изходящи връзки към вашата база данни. 

Свързване към отдалечен сървър с помощта на MySQL(Connecting to a Remote Server Using MySQL)

След като конфигурирате вашата MySQL база данни да позволява отдалечени връзки, ще трябва действително да установите връзка с нея. Можете да направите това с помощта на командата mysql ( mysql.exe на Windows ) от терминал или прозорец на PowerShell .

Ако използвате Windows , ще трябва да се уверите, че MySQL е инсталиран локално,(MySQL is installed locally) преди да започнете. Потребителите на Mac(Mac) могат да инсталират MySQL с помощта на homebrew(using homebrew) от терминала ( brew install mysql ), докато потребителите на Linux могат да използват своето локално хранилище на приложения (например sudo apt install mysql ), за да инсталират необходимите пакети.

Свързване с MySQL на Linux или Mac(Connecting to MySQL on Linux or Mac)

  1. За да се свържете с вашия отдалечен MySQL сървър на Mac или Linux , отворете нов прозорец на терминала и въведете mysql -u потребителско име -h XXXX:XXXX -p(mysql -u username -h X.X.X.X:XXXX -p) . Заменете XXXX:XXXX с IP адреса и номера на вашия отдалечен сървър (напр. 100.200.100.200:3306 ) и потребителското име(username) с вашето потребителско име на MySQL.

  1. Когато бъдете подканени, потвърдете паролата си. Ако връзката е успешна, в терминала ще се появи съобщение за успех.

Свързване с MySQL на Windows(Connecting to MySQL on Windows)

  1. За да се свържете с отдалечен MySQL сървър на Windows , отворете нов прозорец на PowerShell , като щракнете с десния бутон върху менюто " Старт(Start) " и изберете Windows PowerShell (Администратор)(Windows PowerShell (Admin)) .

  1. В новия прозорец на PowerShell въведете cd “C:\Program Files\MySQL\MySQL Workbench 8.0\ ”, за да въведете правилната папка, като замените тази директория с правилната инсталационна директория на вашия компютър. Например, ако вашата версия на MySQL е 8.0.1, използвайте вместо това папката MySQL Workbench 8.0.1 .

  1. Оттам въведете .\mysql.exe -u username -h X.X.X.X:XXXX -p . Заменете XXXX:XXXX с IP адреса и номера на вашия отдалечен сървър (напр. 100.200.100.200:3306 ) и потребителското име(username) с потребителско име на MySQL , което позволява отдалечен достъп (като root ). Следвайте(Follow) всички допълнителни инструкции на екрана.
  2. Предоставете вашата парола, когато бъдете подканени, за да завършите процеса на влизане и да получите достъп до вашата MySQL база данни от разстояние.

Ако това не работи, свържете се със сървъра или компютъра, който хоства вашия MySQL сървър, използвайки SSH (или достъп до него директно), като използвате тези стъпки и с помощта на аргумента -h localhost . След това можете да създадете подходящ потребителски акаунт, като следвате стъпките по-долу.

Разрешаване на отдалечен потребителски достъп до MySQL база данни(Allowing Remote User Access to a MySQL Database)

До този момент би трябвало да можете да се свържете с вашия MySQL сървър отдалечено, като използвате root потребителския акаунт на вашия сървър или друг потребителски акаунт с повишени привилегии. Тъй като това ниво на достъп не е безопасно, може да предпочетете да създадете по-ограничен акаунт за достъп до вашата MySQL база данни.

Този акаунт ще има ограничен достъп до вашия MySQL сървър, което му позволява да взаимодейства само с избрани бази данни. Той няма да може да прави по-сериозни промени, като например достъп до други данни от базата данни, създаване на нови потребителски акаунти и т.н. 

Ще трябва да имате възможност да влизате отдалечено във вашия MySQL сървър. Ако не можете да използвате отдалечено своя root акаунт, ще трябва да получите достъп до обвивката на вашия сървър, като използвате командата mysql чрез отдалечена SSH връзка или чрез директен достъп до компютъра или сървъра, който хоства сървъра.

  1. Във вашата отдалечена MySQL обвивка (с помощта на инструмента mysql ) въведете CREATE USER “username”@”x.x.x.x” IDENTIFIED BY “password”; и изберете Enter . Заменете потребителското име(username ) с потребителското име, което искате да създадете, xxxx с IP адреса, от който искате да се свържете, и паролата(password) с подходяща парола.

  1. Ще трябва да предоставите на новия си акаунт необходимите разрешения. За да направите това, въведете GRANT ALL ON databasename.* TO username@”x.x.x.x”; и заменете базата данни, потребителско име(databasename, username, ) и xxxx  с правилните данни. Ако желаете, заменете базата данни(databasename) с * , за да й предоставите достъп до всички бази данни. 

С предоставен достъп, използвайте стъпките в раздела по-горе, за да се свържете отдалечено с вашия сървър, като използвате новия си акаунт (напр. mysql -u потребителско име -h XXXX:XXXX -p(mysql -u username -h X.X.X.X:XXXX -p) ).

Защита на данните ви от базата данни(Securing Your Database Data)

Независимо дали работите с MySQL или друг тип SQL база данни, важно е да поддържате връзките си сигурни, за да поддържате сигурността на данните си. Добър начин да направите това е да генерирате SSH ключове за отдалечен достъп(generate SSH keys for remote access) до вашия сървър, вместо да разчитате на остарели (и лесно отгатни) пароли.

Ако се притеснявате от загуба на данни, можете лесно да архивирате вашата база данни(back up your database) онлайн. Повечето бази данни се изпълняват с помощта на Linux сървъри - можете лесно да автоматизирате архивиране на Linux файлове(automate a Linux file backup easily) . Ако използвате MySQL на Windows , можете да настроите подобна система за автоматично архивиране за Windows(automatic backup system for Windows) , което ви позволява да възстановите данните си при спешни случаи.



About the author

Аз съм компютърен програмист и съм от над 15 години. Уменията ми са в разработването и поддържането на софтуерни приложения, както и в предоставянето на техническа поддръжка за тези приложения. Също така съм преподавал компютърно програмиране на гимназисти и в момента съм професионален инструктор.



Related posts