Jak zezwolić na zdalne połączenia z MySQL?

Jeśli pracujesz z bazą danych MySQL(MySQL database) , wiesz już, z jakimi wyzwaniami wiąże się ochrona bazy danych. Od prób włamań do bazy danych przy użyciu iniekcji SQL po ataki typu brute force, trudno jest zapewnić bezpieczeństwo danych, zwłaszcza jeśli pracujesz z bazą danych zdalnie.

Istnieją sposoby na skonfigurowanie serwera SQL tak, aby zezwalał na połączenia zdalne, ale musisz być ostrożny, ponieważ zezwolenie na zdalne połączenia na serwerze MySQL może sprawić, że Twoja baza danych stanie się łatwym celem dla hakerów. Jeśli chcesz zezwolić na bezpieczne, zdalne połączenia z bazą danych MySQL , oto, co musisz wiedzieć.

Zanim zaczniesz(Before You Begin)

Przed wprowadzeniem jakichkolwiek zmian w bazie danych MySQL ważne jest, aby wykonać kopię zapasową bazy danych(backup your database) , zwłaszcza jeśli pracujesz na serwerze produkcyjnym (serwer w aktywnym użyciu). Wszelkie zmiany wprowadzone w bazie danych lub serwerze, na którym jest ona hostowana, mogą spowodować poważną utratę danych, jeśli coś pójdzie nie tak.

Może się również okazać, że zmiany w połączeniach Twojego serwera mogą uniemożliwić Ci późniejszy dostęp do niego. W takim przypadku konieczne może być skonsultowanie się z administratorem serwera w celu uzyskania dalszej pomocy. Dobrym pomysłem jest wypróbowanie wszelkich zmian na lokalnie uruchomionym serwerze MySQL , aby sprawdzić, czy zmiany działają, zanim spróbujesz ich zdalnie.

Jest również prawdopodobne, że jeśli wprowadzasz zmiany na serwerze zdalnym, będziesz potrzebować bezpiecznego sposobu łączenia się i wprowadzania zmian. SSH (Secure Shell) jest często najlepszym sposobem na zrobienie tego, ponieważ pozwala połączyć się ze zdalnym serwerem. Możesz także użyć SSH do łączenia się z serwerami w sieci lokalnej, takimi jak te hostowane na Raspberry Pi(hosted on a Raspberry Pi) .

Ten przewodnik poprowadzi Cię przez etapy konfigurowania MySQL w celu umożliwienia połączeń zdalnych, ale najpierw musisz upewnić się, że masz bezpośredni lub zdalny dostęp do serwera, na którym znajduje się Twój serwer MySQL .

Załóżmy(Suppose) , że nie masz zdalnego dostępu do serwera przez SSH (na przykład). W takim przypadku nie będziesz w stanie skonfigurować bazy danych MySQL tak, aby umożliwiała bezpośrednie połączenia zdalne, chyba że Twoje konto root mySQL już zezwala na połączenia zdalne. Musisz więc najpierw nawiązać to połączenie, zanim będziesz mógł kontynuować.

Edycja pliku konfiguracyjnego MySQL(Editing Your MySQL Configuration File)

Pierwszym krokiem w konfiguracji MySQL w celu umożliwienia połączeń zdalnych jest edycja pliku konfiguracyjnego MySQL . Na tym etapie ten przewodnik zakłada, że ​​już połączyłeś się z serwerem, komputerem PC lub Mac , na którym znajduje się Twoja baza danych mySQL, i masz dostęp do konsoli. 

Alternatywnie możesz skonfigurować lokalny serwer MySQL za pomocą otwartego terminala w systemie Mac(Mac) lub Linux lub edytora tekstu w systemie Windows(Windows) .

  1. Aby rozpocząć, użyj preferowanego edytora tekstu konsoli do edycji pliku bazy danych MySQL . W systemie Linux(Linux) wpisz sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf w terminalu lub oknie SSH , aby edytować ten plik za pomocą edytora nano (zakładając, że baza danych MySQL znajduje się w domyślnej lokalizacji)

  1. Jeśli używasz systemu Windows(Windows) , otwórz Eksplorator plików(File Explorer) i przejdź do folderu zawierającego instalację MySQL (np. C:/Program Files/MySQL/MySQL Server 8.0 ). Otwórz plik my.ini za pomocą domyślnego edytora tekstu (np. Notatnika(Notepad) ), klikając dwukrotnie wpis. Jeśli go tam nie ma, najpierw utwórz plik(create the file first) .

  1. Na Macu(Mac) otwórz okno terminala i wpisz sudo nano /usr/local/etc/my.cnf . Jest to domyślny plik konfiguracyjny dla MySQL , jeśli zainstalowałeś MySQL przy użyciu homebrew(using homebrew) .

Wymienione powyżej lokalizacje są domyślnymi lokalizacjami plików konfiguracyjnych MySQL . Jeśli te polecenia nie działają, musisz ręcznie wyszukać odpowiednie pliki ( my.cnf , mysqld.cnf lub my.ini ), aby zlokalizować odpowiednią ścieżkę pliku.

Ustawianie zakresu IP bezpiecznego adresu powiązania(Setting a Safe Bind-Address IP Range)

  1. Po otwarciu pliku konfiguracyjnego MySQL dla swojego serwera użyj klawisza strzałki na klawiaturze, aby przejść do sekcji adresu powiązania pliku. (bind-address)Ten zakres adresów IP ogranicza połączenia z bazą danych, która zazwyczaj jest ustawiona tak, aby zezwalać tylko na połączenia z komputera lokalnego lub serwera przy użyciu 127.0.0.1 .

  1. Jeśli chcesz skonfigurować bazę danych MySQL tak, aby zezwalała na połączenia z urządzeń korzystających z bieżącego połączenia internetowego, najpierw znajdź swój publiczny adres IP(find your public IP address) , a następnie zastąp 127.0.0.1 tym adresem IP. Alternatywnie zastąp go adresem IP urządzenia lub serwera, z którego chcesz zezwolić na połączenia.

  1. W niektórych przypadkach możesz zezwolić na wszystkie(all) zdalne połączenia z bazą danych MySQL . Wiąże się to z ekstremalnym ryzykiem(extreme risk) i nie powinno być używane na serwerze produkcyjnym. Jeśli jednak chcesz na to zezwolić, zamień 127.0.0.1 na 0.0.0.0 .

  1. Zanotuj wartość portu(port ) w sekcji Ustawienia podstawowe(Basic Settings) . Będzie to wymagane w następnej sekcji. Jeśli nie jest widoczny, zostanie użyta wartość domyślna, czyli port 3306 . Możesz dodać własny port, wpisując port = xxxx w nowym wierszu, zastępując xxxx odpowiednią wartością portu.

  1. Po skonfigurowaniu adresu powiązania(bind-address ) w pliku konfiguracyjnym MySQL zapisz plik. Jeśli korzystasz z systemu Linux(Linux) , wybierz Ctrl + O i Ctrl + X , aby to zrobić. Na Macu wybierz Command + O i Command + X . Użytkownicy systemu Windows mogą zapisywać, wybierając Plik(File ) > Zapisz(Save) .

  1. Następnie użytkownicy systemów Linux(Linux) i Mac mogą ponownie uruchomić MySQL , wpisując mysql.server stop && mysql.server start lub mysql.server restart . Może być konieczne podniesienie polecenia za pomocą sudo(using sudo) (np. sudo mysql.server restart ) i użycie odpowiedniej ścieżki do pliku mysql.server (np. /usr/local/bin/mysql.server ).

  1.  Jeśli powyższe polecenie nie działa, spróbuj zamiast tego uruchomić sudo service mysql restart .(sudo service mysql restart )

  1. Aby ponownie uruchomić MySQL w systemie Windows(Windows) , otwórz nowe okno PowerShell , klikając prawym przyciskiem myszy menu Start i wybierając Windows PowerShell (Admin) . W oknie PowerShell wpisz net stop mysql80 , a następnie net start mysql80 , zastępując mysql80 poprawną nazwą usługi na twoim komputerze.

Jeśli nie masz pewności co do prawidłowej nazwy usługi w systemie Windows(Windows) , wpisz net start , aby ją znaleźć. Jeśli nie możesz ponownie załadować konfiguracji, uruchom ponownie serwer i ręcznie załaduj MySQL (jeśli to konieczne).(MySQL)

Konfiguracja zapór sieciowych(Configuring Your Firewalls)

Na tym etapie Twoja baza danych MySQL powinna zezwalać na połączenia zdalne z urządzeń korzystających z adresu IP ustawionego jako wartość adresu powiązania w pliku konfiguracyjnym (bind-address)MySQL (lub ze wszystkich urządzeń, jeśli zamiast tego ustawisz tę wartość na 0.0.0.0 ). Jednak połączenia będą nadal blokowane przez urządzenie lub zaporę sieciową(device or network firewall) .

Większość serwerów i komputerów używa zapory do blokowania połączeń, chyba że zostanie przyznany dostęp do określonego portu. Czynności, które należy wykonać, aby to skonfigurować, będą się różnić w zależności od tego, czy używasz MySQL w systemie Windows(Windows) czy Linux . Zapory Mac(Mac) są domyślnie wyłączone, więc nie musisz wykonywać tutaj żadnych dodatkowych czynności.

Skonfiguruj zapory systemu Linux(Configure Linux Firewalls)

Wiele serwerów Linux używa iptables jako domyślnego narzędzia zapory. Możesz go skonfigurować, wykonując poniższe czynności.

  1. Otwórz terminal lub połączenie SSH i wpisz sudo iptables -A INPUT -p tcp -s XXXX –dport YYYY -j ACCEPT . Zastąp XXXX adresem IP urządzenia, z którego chcesz zezwolić na połączenia(from) MySQL i(MySQL) zastąp YYYY pasującą wartością portu z pliku konfiguracyjnego MySQL (np. (MySQL)3306 ).

  1. Spowoduje to tymczasowe skonfigurowanie zapory. Jeśli używasz serwera Linux opartego na Debianie lub Ubuntu , wprowadź tę zmianę na stałe, wpisując sudo netfilter-persistent save i sudo netfilter-persistent reload w terminalu lub oknie SSH.

Jeśli iptables nie jest domyślnym narzędziem zapory sieciowej dla twojej dystrybucji Linuksa(Linux) , musisz zapoznać się z instrukcją obsługi swojej dystrybucji, aby uzyskać więcej informacji. Jeśli niektóre pakiety (takie jak netfilter-persistent ) są niedostępne, użyj narzędzia repozytorium oprogramowania twojej dystrybucji, aby je zainstalować (np. sudo apt install netfilter-persistent ).

Skonfiguruj zapory systemu Windows(Configure Windows Firewalls)

Jeśli używasz komputera lub serwera z systemem Windows do obsługi bazy danych, możesz skonfigurować zaporę, wykonując następujące czynności:

  1. Kliknij prawym przyciskiem myszy(Right-click) menu Start i wybierz Uruchom(Run) .

  1. W polu Uruchom(Run) wpisz wf.msc i wybierz OK .

  1. W oknie Windows Defender wybierz Reguły przychodzące(Inbound Rules ) > Nowa reguła(New Rule) .

  1. W oknie Kreatora nowej reguły ruchu przychodzącego(New Inbound Rule Wizard) wybierz opcję Port > Dalej(Next) .

  1. W następnym menu wybierz TCP z opcji, wpisz 3306 (lub dowolną wartość portu wymienioną w pliku konfiguracyjnym MySQL ), a następnie wybierz (MySQL)Dalej(Next) .

  1. W menu Akcja(Action) pozostaw domyślną opcję Zezwól na połączenie(Allow the connection) włączone, a następnie wybierz Dalej(Next) .

  1. Potwierdź, że chcesz zastosować regułę do wszystkich typów sieci, a następnie wybierz Dalej(Next)

  1. Wpisz opisową nazwę reguły (np. MySQL ) w podanym porcie, a następnie wybierz Zakończ(Finish) , aby dodać ją do listy reguł zapory.

Jeśli masz problemy z połączeniem, powtórz powyższe kroki, upewniając się, że utworzyłeś nową regułę ruchu wychodzącego(outbound rule ) w ustawieniach zapory sieciowej przy użyciu tych samych szczegółów (port 3306 itd.). Może być również konieczne skonfigurowanie routera sieci lokalnej, aby otworzyć niezbędne zablokowane porty,(open the necessary blocked ports) aby umożliwić połączenia przychodzące i wychodzące z bazą danych. 

Łączenie się ze zdalnym serwerem za pomocą MySQL(Connecting to a Remote Server Using MySQL)

Po skonfigurowaniu bazy danych MySQL tak, aby zezwalała na połączenia zdalne, musisz faktycznie nawiązać z nią połączenie. Możesz to zrobić za pomocą polecenia mysql ( mysql.exe w systemie Windows(Windows) ) z terminala lub okna PowerShell .

Jeśli używasz systemu Windows(Windows) , przed rozpoczęciem upewnij się, że MySQL jest zainstalowany lokalnie . (MySQL is installed locally)Użytkownicy komputerów Mac(Mac) mogą zainstalować MySQL za pomocą homebrew(using homebrew) z terminala ( brew install mysql ), podczas gdy użytkownicy Linuksa(Linux) mogą użyć lokalnego repozytorium aplikacji (np. sudo apt install mysql ) do zainstalowania niezbędnych pakietów.

Łączenie się z MySQL w systemie Linux lub Mac(Connecting to MySQL on Linux or Mac)

  1. Aby połączyć się ze zdalnym serwerem MySQL w (MySQL)systemie Mac(Mac) lub Linux , otwórz nowe okno terminala i wpisz mysql -u nazwa użytkownika -h XXXX:XXXX -p(mysql -u username -h X.X.X.X:XXXX -p) . Zastąp XXXX:XXXX adresem IP zdalnego serwera i numerem portu (np. 100.200.100.200:3306 ) oraz nazwę użytkownika nazwą(username) użytkownika MySQL.

  1. Po wyświetleniu monitu potwierdź hasło. Jeśli połączenie się powiedzie, w terminalu pojawi się komunikat o powodzeniu.

Łączenie z MySQL w systemie Windows(Connecting to MySQL on Windows)

  1. Aby połączyć się ze zdalnym serwerem MySQL w (MySQL)systemie Windows(Windows) , otwórz nowe okno PowerShell , klikając prawym przyciskiem myszy menu Start i wybierając Windows PowerShell (Admin) .

  1. W nowym oknie PowerShell wpisz cd “C:\Program Files\MySQL\MySQL Workbench 8.0\ ”, aby wprowadzić właściwy folder, zastępując ten katalog poprawnym katalogiem instalacyjnym na komputerze. Na przykład, jeśli twoja wersja MySQL to 8.0.1, użyj zamiast tego folderu MySQL Workbench 8.0.1 .

  1. Następnie wpisz .\mysql.exe -u username -h X.X.X.X:XXXX -p . Zastąp XXXX:XXXX adresem IP zdalnego serwera i numerem portu (np. 100.200.100.200:3306 ) oraz nazwę użytkownika(username) z nazwą użytkownika MySQL , która umożliwia zdalny dostęp (np. root ). Postępuj zgodnie(Follow) z dodatkowymi instrukcjami wyświetlanymi na ekranie.
  2. Po wyświetleniu monitu podaj swoje hasło, aby zakończyć proces logowania i uzyskać zdalny dostęp do bazy danych MySQL .

Jeśli to nie zadziała, połącz się z serwerem lub komputerem, na którym znajduje się Twój serwer MySQL , za pomocą (MySQL)SSH (lub uzyskaj do niego bezpośredni dostęp), wykonując te czynności i używając argumentu -h localhost . Następnie możesz utworzyć odpowiednie konto użytkownika, wykonując poniższe czynności.

Zezwalanie użytkownikowi na zdalny dostęp do bazy danych MySQL(Allowing Remote User Access to a MySQL Database)

W tym momencie powinieneś być w stanie połączyć się zdalnie z serwerem MySQL przy użyciu konta użytkownika root serwera lub innego konta użytkownika z podwyższonymi uprawnieniami. Ponieważ ten poziom dostępu jest niebezpieczny, możesz utworzyć bardziej ograniczone konto w celu uzyskania dostępu do bazy danych MySQL .

To konto będzie miało ograniczony dostęp do twojego serwera MySQL , co pozwoli mu na interakcję tylko z wybranymi bazami danych. Nie będzie w stanie dokonać poważniejszych zmian, takich jak dostęp do innych danych bazy danych, tworzenie nowych kont użytkowników itp. 

Musisz mieć możliwość zdalnego logowania się do serwera MySQL . Jeśli nie możesz użyć swojego konta root zdalnie, będziesz musiał uzyskać dostęp do powłoki serwera za pomocą polecenia mysql przez zdalne połączenie SSH lub przez bezpośredni dostęp do komputera PC lub serwera, na którym znajduje się serwer.

  1. W zdalnej powłoce MySQL (używając narzędzia (MySQL)mysql ) wpisz CREATE USER “username”@”x.x.x.x” IDENTIFIED BY “password”; i wybierz Enter . Zastąp nazwę użytkownika(username ) nazwą użytkownika, którą chcesz utworzyć, xxxx adresem IP, z którego chcesz się połączyć, a hasło(password) odpowiednim hasłem.

  1. Musisz przyznać nowemu kontu niezbędne uprawnienia. Aby to zrobić, wpisz GRANT ALL ON databasename.* TO username@”x.x.x.x”; i zastąp nazwę bazy danych, nazwę użytkownika(databasename, username, ) i xxxx  poprawnymi danymi. Jeśli chcesz, zamień databasename na * , aby przyznać mu dostęp do wszystkich baz danych. 

Po przyznaniu dostępu wykonaj czynności opisane w powyższej sekcji, aby połączyć się zdalnie z serwerem przy użyciu nowego konta (np. mysql -u nazwa użytkownika -h XXXX:XXXX -p(mysql -u username -h X.X.X.X:XXXX -p) ).

Zabezpieczanie danych bazy danych(Securing Your Database Data)

Niezależnie od tego, czy pracujesz z MySQL , czy z innym typem bazy danych SQL , ważne jest, aby Twoje połączenia były bezpieczne, aby zachować bezpieczeństwo danych. Dobrym sposobem na to jest wygenerowanie kluczy SSH w celu zdalnego dostępu(generate SSH keys for remote access) do serwera, zamiast polegania na nieaktualnych (i łatwych do odgadnięcia) hasłach.

Jeśli martwisz się utratą danych, możesz łatwo wykonać kopię zapasową bazy danych(back up your database) online. Większość baz danych działa na serwerach z systemem Linux — można łatwo (Linux)zautomatyzować tworzenie kopii zapasowych plików w systemie Linux(automate a Linux file backup easily) . Jeśli używasz MySQL w systemie Windows(Windows) , możesz skonfigurować podobny system automatycznego tworzenia kopii zapasowych dla systemu Windows(automatic backup system for Windows) , który pozwoli Ci przywrócić dane w nagłych wypadkach.



About the author

inżynier audiofilski i specjalista ds. produktów audio z ponad 10-letnim doświadczeniem. Specjalizuję się w tworzeniu wysokiej jakości głośników muzycznych i słuchawek od początku do końca. Jestem ekspertem w rozwiązywaniu problemów z dźwiękiem oraz projektowaniu nowych głośników i systemów słuchawkowych. Moje doświadczenie wykracza poza samo tworzenie dobrych produktów; Mam również pasję pomagania innym w byciu jak najlepszymi, czy to poprzez edukację, czy pracę społeczną.



Related posts