Linux: logowanie do MySQL i bezpieczne listowanie baz danych

ByTomasz Sanecki

Linux: logowanie do MySQL i bezpieczne listowanie baz danych

phpMyAdmin jest narzędziem, pozwalającym zarządzać bazą danych MySQL, która funkcjonuje w ramach serwera w home.pl. phpMyAdmin, czyli narzędzie do zarządzania bazą danych MySQL dostępne jest pod adresem: „nazwa_serwera.home.pl/sql„, np. W sekcji Bazy danych znajdziesz informacje o ilości i rodzaju utworzonych baz danych.

Przy każdej bazie danych znajduje się link do panelu edycji bazy danych. Kliknij przycisk Wszystko aby przejść do listy baz danych. Przy każdej bazie danych znajdziesz link kierujący do właściwego typu panelu.

Wymagania wstępne

Przed kontynuowaniem potwierdź następujące kwestie:

  • MySQL Server lub MariaDB jest zainstalowany i usługa jest aktywna.
  • Posiadasz konto użytkownika z co najmniej uprawnieniem SHOW DATABASES lub uwierzytelnisz się jako root.
  • Plik binarny klienta mysql jest dostępny w PATH Twojej powłoki (zweryfikuj za pomocą which mysql).
  • Jeśli zarządzasz zdalnym serwerem - na przykład środowiskiem VPS Hosting - upewnij się również, że port MySQL (domyślnie 3306) jest osiągalny lub że łączysz się przez SSH.

Krok 1: Sprawdź, czy usługa MySQL jest uruchomiona

Przed próbą połączenia potwierdź, że demon jest aktywny:

sudo systemctl status mysql

W przypadku instalacji MariaDB nazwa usługi jest inna:

sudo systemctl status mariadb

Jeśli usługa jest zatrzymana, uruchom ją:

sudo systemctl start mysql

Nieudane uruchomienie jest prawie zawsze wyjaśnione w journalctl -xe lub w /var/log/mysql/error.log. Sprawdź te pliki najpierw, zanim założysz problem z konfiguracją.

Krok 2: Uwierzytelnij się na serwerze MySQL

Standardowe interaktywne logowanie

mysql -u root -p

-u root - określa nazwę użytkownika MySQL. Zastąp root dowolnym prawidłowym kontem.

-p - monituje o hasło interaktywnie. Nigdy nie podawaj hasła bezpośrednio w wierszu poleceń w środowisku produkcyjnym (np. done

Łączenie ze zdalnym hostem lub niestandardowym portem

W razie potrzeby wskazuj host i port w wywołaniu klienta mysql. W środowiskach, gdzie dostęp do bazy danych jest powiązany z SSL Certificates i szyfrowanymi połączeniami, dodaj --ssl-mode=REQUIRED do wywołań klienta mysql, aby wymusić TLS podczas transmisji.

Używanie pliku opcji do automatyzacji

Nigdy nie podawaj haseł jako argumentów wiersza poleceń w środowisku produkcyjnym. Używaj -p do sesji interaktywnych i ~/.my.cnf do automatyzacji.

Krok 3: Wylistuj wszystkie bazy danych

Wylistowanie wszystkich baz danych MySQL z wiersza poleceń odbywa się za pomocą jednej instrukcji SQL - SHOW DATABASES; - wykonywanej po uwierzytelnieniu się na serwerze MySQL przy użyciu klienta mysql.

Działa to na każdej dystrybucji Linux z uruchomionym MySQL 5.7, MySQL 8.x lub kompatybilnym serwerem MariaDB i wymaga uprawnienia SHOW DATABASES lub dostępu superużytkownika.

Krok 4: Filtruj listę baz danych

Filtruj według wzorca nazwy

Ten przewodnik wykracza poza podstawowe polecenie. Obejmuje opcje uwierzytelniania, widoczność w zakresie uprawnień, wzorce skryptowania nieinteraktywnego, filtrowanie schematu wydajności oraz typowe błędy, które sprawiają trudności nawet doświadczonym administratorom.

Zapytaj information_schema w celu zaawansowanego filtrowania

information_schema.SCHEMATA jest zdecydowanie potężniejszy niż SHOW DATABASES w przypadku zapytań skryptowanych lub filtrowanych.

Krok 5: Sprawdź konkretną bazę danych

Używaj uprawnień minimalnych i testuj dostęp. Gdy użytkownik nie ma odpowiednich praw, zobaczy ograniczoną listę schematów - to zachowanie ma charakter bezpieczeństwa.

Krok 6: Wyjdź z powłoki MySQL

Wyjdź z powłoki MySQL po zakończeniu czynności administracyjnych.

Użycie nieinteraktywne: wylistowanie baz danych z powłoki

Jednolinijkowiec z flagą -e

Użyj flagi -e w połączeniu z opcjami hosta i portu:

mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-names

Pomiń wiersz nagłówka dla skryptowania

--skip-column-names pozwala wygodnie integrować wynik z automatyzacją i skryptami.

Używanie mysqlshow jako alternatywy

Narzędzie mysqlshow zapewnia szybki przegląd bez wchodzenia do powłoki MySQL:

mysqlshow -u root -p

Wylistowuje wszystkie bazy danych, które uwierzytelniony użytkownik może zobaczyć, i akceptuje argument nazwy bazy danych, aby przejść do szczegółów na poziomie tabel:

mysqlshow -u root -p database_name

Zakres uprawnień: dlaczego niektóre bazy danych są ukryte

Jest to jedno z najbardziej niezrozumianych zachowań w MySQL. Gdy użytkownik nie posiada globalnego uprawnienia SHOW DATABASES, SHOW DATABASES zwraca tylko bazy danych, dla których ten użytkownik posiada co najmniej jedno uprawnienie.

Jest to celowe - jest to granica bezpieczeństwa, a nie błąd bezpieczeństwa i nie błąd konfiguracji.

Praktyczna implikacja: Ograniczony użytkownik aplikacji może uruchomić SHOW DATABASES; i zobaczyć tylko jedną lub dwie bazy danych, nawet jeśli serwer hostuje pięćdziesiąt. Jest to prawidłowe zachowanie.

FLUSH PRIVILEGES;

MySQL vs. MariaDB: różnice w zachowaniu

Zarówno MySQL, jak i MariaDB obsługują SHOW DATABASES; i information_schema.SCHEMATA, ale istnieją subtelne różnice warte poznania:

Funkcja MySQL 8.x MariaDB 10.x
Składnia `SHOW DATABASES` Obsługiwana Obsługiwana
`information_schema.SCHEMATA` Dostępny Dostępny
Domyślny `performance_schema` Włączony Włączony (10.5+)
Schemat `sys` Dołączony domyślnie Opcjonalny, nie zawsze obecny
`SHOW DATABASES LIKE` Obsługiwany Obsługiwany
Model uprawnień oparty na rolach Natywny (8.0+) Natywny (10.0.5+)
Plik binarny klienta `mysql` `mysql` `mysql` lub `mariadb`

W nowszych instalacjach MariaDB kanonicznym plikiem binarnym może być mariadb zamiast mysql, choć dowiązanie symboliczne zazwyczaj zachowuje wsteczną kompatybilność.

Praktyczna macierz decyzyjna

Jeśli potrzebujesz szybkiego sprawdzenia w trybie interaktywnym, używaj SHOW DATABASES lub przeglądaj w phpMyAdmin. Jeśli chcesz skryptować i filtrować wynik, stosuj information_schema.SCHEMATA oraz --skip-column-names przy pracy z -e.

Typowe błędy i sposoby ich naprawy

ERROR 1045 (28000): Access denied for user

Oznacza to, że uwierzytelnianie nie powiodło się. Sprawdź dokładnie nazwę użytkownika, hasło i host.

W przypadku root w MySQL 8 domyślną wtyczką uwierzytelniania jest caching_sha2_password. Jeśli Twój klient jej nie obsługuje, połącz się przez gniazdo:

sudo mysql -u root

Omija to uwierzytelnianie hasłem podczas uruchamiania jako użytkownik Linux root, opierając się zamiast tego na wtyczce auth_socket lub unix_socket.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket

Demon MySQL nie jest uruchomiony lub ścieżka do pliku gniazda jest nieprawidłowa.

ls -la /var/run/mysqld/mysqld.sock

ERROR 1044 (42000): Access denied for user to database

Użytkownik jest uwierzytelniony, ale nie posiada uprawnień do docelowej bazy danych.

Użytkownik bez globalnego SHOW DATABASES widzi tylko bazy danych, do których ma jawny dostęp - jest to funkcja bezpieczeństwa, a nie błąd konfiguracji.

Lista technicznych wskazówek, które oszczędzają czas

  • information_schema.SCHEMATA jest zdecydowanie potężniejszy niż SHOW DATABASES w przypadku zapytań skryptowanych lub filtrowanych.
  • Narzędzie mysqlshow jest niedoceniane i zapewnia szybką, nieinteraktywną inspekcję baz danych i tabel.
  • W MySQL 8 uwierzytelnianie oparte na gnieździe (sudo mysql) jest często najszybszą ścieżką do dostępu root na lokalnym serwerze.
  • Podczas zarządzania wieloma bazami danych na VPS z cPanel lub innym panelem sterowania, menedżer baz danych panelu jest graficzną nakładką na te same polecenia SQL - zrozumienie podstawowych zapytań daje pełną kontrolę, gdy GUI nie wystarcza.
  • W środowiskach, gdzie dostęp do bazy danych jest powiązany z SSL Certificates i szyfrowanymi połączeniami, dodaj --ssl-mode=REQUIRED do wywołań klienta mysql, aby wymusić TLS podczas transmisji.

FAQ

Dlaczego SHOW DATABASES nie pokazuje wszystkich baz danych na moim serwerze?

O: Konto użytkownika, jako które jesteś uwierzytelniony, nie posiada globalnego uprawnienia SHOW DATABASES. MySQL zwraca tylko bazy danych, dla których ten użytkownik posiada co najmniej jedno uprawnienie. Uwierzytelnij się jako root lub nadaj uprawnienie SHOW DATABASES, aby zobaczyć pełną listę.

Jaka jest różnica między SHOW DATABASES a zapytaniem information_schema.SCHEMATA?

O: Obie metody zwracają listę dostępnych schematów, ale information_schema.SCHEMATA udostępnia dodatkowe kolumny metadanych - domyślny zestaw znaków, domyślne sortowanie - i obsługuje pełne filtrowanie SQL za pomocą WHERE, ORDER BY i JOIN. Używaj SHOW DATABASES do szybkich interaktywnych sprawdzeń i information_schema.SCHEMATA do zapytań skryptowanych lub analitycznych.

Jak wylistować bazy danych MySQL na zdalnym serwerze bez otwierania sesji interaktywnej?

O: Użyj flagi -e w połączeniu z opcjami hosta i portu:

mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-names

Czy mogę wylistować bazy danych MySQL bez znajomości hasła root?

O: Na lokalnym serwerze, gdzie masz dostęp Linux root, tak. Wtyczka auth_socket MySQL (lub unix_socket w MariaDB) uwierzytelnia na podstawie użytkownika systemu operacyjnego Linux. Uruchom sudo mysql i uzyskasz dostęp jako użytkownik MySQL root bez monitu o hasło.

Czy SHOW DATABASES działa tak samo w MariaDB jak w MySQL?

O: Składnia jest identyczna, a reguły zakresu uprawnień są takie same.

Praktyczny kontekst: logowanie zwykłego użytkownika MySQL

Większość skryptów CMS i sklepów internetowych do przechowywania danych wykorzystuje bazy MySQL. Otworzy się strona z listą baz danych oraz najważniejszymi opcjami związanymi z zarządzaniem bazami danych.

Pod listą znajduje się formularz tworzenia nowej bazy danych. Po kliknięciu przycisku "Zarządzaj" z prawej strony listy przy wybranej bazie danych otworzy się panel zarządzania bazą danych.

Po przejściu do panelu zarządzania kontem bazy danych u góry wyświetla się informacja o nazwie konta, liczbie baz danych do których to konto ma dostęp, a także o liczbie urządzeń mogących korzystać z tego konta.

Poniżej znajduje się sekcja pozwalająca na zmianę hasła do konta, poprzez wygenerowanie losowego (przycisk z lewej strony) lub wpisanie własnego. Pod sekcją zmiany hasła, znajdują się dwie kolejne. Pierwsza pozwala na zarządzanie dostępem tego konta do poszczególnych baz. Druga służy przyznawaniu różnym urządzeniom dostępu do konta.

"localhost" to wartość domyślna, jest nią sam serwer na którym znajduje się konto. W pasku można wprowadzić adres IP (v4 lub v6), lub znak "%" jeżeli do konta ma mieć dostęp każde urządzenie.

Obrazowo: co sprawdzić, gdy logowanie nie działa

Gdy pojawia się problem z dostępem, wróć do kolejności: najpierw sprawdź, czy usługa jest aktywna, potem uwierzytelnienie i wreszcie uprawnienia do schematów. Nieudane uruchomienie jest prawie zawsze wyjaśnione w journalctl -xe lub w /var/log/mysql/error.log. Sprawdź te pliki najpierw, zanim założysz problem z konfiguracją.

ERROR 1045 (28000): Access denied for user - to uwierzytelnianie. ERROR 2002 (HY000): Can't connect to local MySQL server through socket - to demon lub gniazdo. ERROR 1044 (42000): Access denied for user to database - to uprawnienia do konkretnej bazy.

schemat logowania do MySQL

Najważniejsze kroki przygotowawcze (gdy startujesz od zera na Linux)

Jeśli chcesz mieć gotowe środowisko, w którym logowanie do MySQL będzie możliwe i bezpieczne, w praktyce należy: zainstalować, uruchomić i włączyć usługę, a następnie wykonać zabezpieczenia.

Zainstalować MySQL na Ubuntu/Debian Opcja A: Instalacja z repozytoriów Ubuntu/Debian Wersje Ubuntu LTS zazwyczaj obejmują MySQL 8 w oficjalnych repozytoriach. Debian może domyślnie używać MariaDB, jeśli używasz metapakietów.

Opcja B: Zainstaluj najnowszą wersję z oficjalnej strony MySQL Repozytorium APTUżyj tego, gdy chcesz mieć najnowsze MySQL 8.x od Oracle. Uwaga: W systemach opartych na RHEL z MySQL 8.

Włącz połączenia zdalne (bezpiecznie) Jeśli serwer aplikacji łączy się z innego hosta, należy wykonać powiązanie MySQL na adres bez pętli zwrotnej i utworzyć użytkownika dla tego hosta.

Preferuj konkretne wpisy hosta zamiast symboli wieloznacznych '%'.

Zabezpiecz instalację Uruchom dołączony skrypt zabezpieczający. Zalecane odpowiedzi: ustaw silne hasło roota, usuń anonimowych użytkowników, zabroń zdalnego logowania roota, usuń testową bazę danych i ponownie załaduj tabele uprawnień.

Utwórz bazę danych i użytkownika o najmniejszych uprawnieniach Połącz się MySQL Jako użytkownik root utwórz bazę danych dla swojej aplikacji i przyznaj dedykowanemu użytkownikowi dostęp z minimalnymi uprawnieniami.

Wskazówka dotycząca bezpieczeństwa: Ogranicz ruch przychodzący 3306 do określonych adresów IP za pomocą grup zabezpieczeń w chmurze lub reguł zapory sieciowej. Nigdy nie narażaj MySQL szeroko do Internetu.

logowanie do serwera MySQL

Szybka checklista: jak zalogować się i zobaczyć bazy

  • Sprawdź, czy usługa działa: sudo systemctl status mysql lub sudo systemctl status mariadb.
  • Uwierzytelnij się: mysql -u root -p (zastąp root właściwym użytkownikiem).
  • Wyświetl bazy: SHOW DATABASES;
  • Gdy lista jest pusta lub niepełna, zweryfikuj uprawnienia SHOW DATABASES (to mechanizm bezpieczeństwa).
  • Do skryptów użyj: mysql ... -e "SHOW DATABASES;" --skip-column-names.
  • Do szybkiego przeglądu bez powłoki użyj: mysqlshow -u root -p.

Meta info

tags: #linux #logowanie #do #mysql

Popularne posty:

About the author

Tomasz Sanecki administrator

Informatyk z zawodu i zamiłowania. Od 2007r właściciel firmy Perfect Systems. Specjalista do spraw bezpieczeństwa IT, serwisu urządzeń elektronicznych, sieci komputerowych. Prywatnie mąż i ojciec dwójki dzieci. Pasjonat nowoczesnych technologii, motocykli oraz włoskiego espresso.