Głównym celem tego zadania jest dogłębne zapoznanie studenta z fundamentalnymi mechanizmami kontroli dostępu i zarządzania tożsamością w serwerze MySQL/MariaDB. Poza samym procesem pierwszego logowania, zadanie koncentruje się na kluczowym aspekcie bezpieczeństwa, jakim jest prawidłowa konfiguracja konta `root` – najważniejszego użytkownika administracyjnego. Student nauczy się nie tylko, jak ustawić dla niego silne hasło, ale również zrozumie, dlaczego jest to jedna z pierwszych i najważniejszych czynności po instalacji serwera. Co więcej, zadanie to wprowadza niezwykle istotną koncepcję specyfikacji uprawnień w formacie `uzytkownik@host`, wyjaśniając, jak serwer decyduje, czy dany użytkownik może połączyć się z określonego miejsca w sieci. Zrozumienie tej koncepcji jest kluczowe do budowania bezpiecznych i skalowalnych aplikacji, ponieważ pozwala na precyzyjne definiowanie, kto i skąd ma dostęp do cennych danych.
Kontynuując pracę nad systemem rezerwacji dla hotelu, student zdaje sobie sprawę, że pozostawienie serwera bazy danych w domyślnej, niezabezpieczonej konfiguracji jest niedopuszczalne. Wie, że konto `root` bez hasła stanowi otwarte zaproszenie dla potencjalnych atakujących. Jego pierwszym zadaniem jest więc natychmiastowe "utwardzenie" serwera. Pracując na środowisku Windows z pakietem XAMPP, uruchamia panel kontrolny i wchodzi do konsoli "Shell". Wpisuje polecenie `mysql -u root` i bez problemu loguje się do serwera, co jest dla niego praktycznym dowodem na istnienie luki w zabezpieczeniach. Niezwłocznie przystępuje do działania. Używając polecenia `ALTER USER`, ustawia skomplikowane i unikalne hasło dla użytkownika `root`, ale tylko dla połączeń lokalnych (`'root'@'localhost'`). To jego pierwsza świadoma decyzja dotycząca bezpieczeństwa – ograniczenie dostępu do superużytkownika tylko z tej samej maszyny, na której działa serwer. Po zmianie hasła i przeładowaniu uprawnień za pomocą `FLUSH PRIVILEGES`, wylogowuje się i próbuje zalogować ponownie. Tym razem serwer prosi go o hasło, co potwierdza, że zmiana została pomyślnie zastosowana. Chcąc głębiej zrozumieć mechanizm `uzytkownik@host`, student postanawia przeprowadzić eksperyment. Tworzy nowego użytkownika o nazwie `recepcja`. Najpierw tworzy konto `recepcja@localhost`, które będzie używane przez aplikację działającą na tym samym serwerze. Następnie, na potrzeby przyszłego zdalnego dostępu administracyjnego z jego laptopa w sieci lokalnej, tworzy drugie konto: `recepcja@192.168.1.100`, podając konkretny adres IP. Na koniec, dla celów testowych, tworzy trzecie, bardzo ryzykowne konto `recepcja@'%'`, które pozwala na logowanie z dowolnego miejsca w sieci. Wykonując zapytanie `SELECT User, Host FROM mysql.user;`, widzi teraz trzy różne wpisy dla tego samego użytkownika, ale z różnymi hostami. Aby w pełni zrozumieć, jak działają uprawnienia, nadaje użytkownikowi `recepcja@localhost` bardzo ograniczone prawa, pozwalające jedynie na odczyt i zapis danych w bazie hotelowej (`GRANT SELECT, INSERT, UPDATE ON test_hotel.*`). Natomiast użytkownikowi `recepcja@192.168.1.100` nadaje szersze uprawnienia, włączając w to możliwość modyfikacji struktury tabel. Po zakończeniu eksperymentu, świadomy zagrożeń, usuwa konto `recepcja@'%'`, pozostawiając jedynie te, które są niezbędne i skonfigurowane zgodnie z zasadą najmniejszych uprawnień.
W środowisku XAMPP, domyślnie konto `root` nie ma ustawionego hasła. Otwórz konsolę "Shell" z panelu XAMPP i zaloguj się do serwera. Zauważ, że serwer nie poprosi o hasło.
# Wejście do katalogu z plikami wykonywalnymi MySQL cd C:\xampp\mysql\bin # Logowanie jako użytkownik root mysql -u root
Będąc zalogowanym w konsoli MySQL, wykonaj poniższe polecenie, aby ustawić bezpieczne hasło. Pamiętaj, aby zastąpić `'TwojeSuperBezpieczneHaslo123!'` własnym, skomplikowanym hasłem.
-- Modyfikacja użytkownika 'root' dla połączeń z 'localhost' ALTER USER 'root'@'localhost' IDENTIFIED BY 'TwojeSuperBezpieczneHaslo123!'; -- Przeładowanie tabel z uprawnieniami, aby zmiany weszły w życie natychmiast FLUSH PRIVILEGES;
Teraz przetestuj, czy zmiana hasła działa. Najpierw wyloguj się z konsoli, a następnie spróbuj zalogować się ponownie, używając nowego parametru `-p`, który poinformuje klienta, że chcesz podać hasło.
-- Wylogowanie z konsoli MySQL exit; # Ponowne logowanie, tym razem z prośbą o hasło mysql -u root -p
Po zalogowaniu, warto sprawdzić, jakie konta użytkowników są domyślnie skonfigurowane na serwerze. Można to zrobić, wykonując zapytanie do systemowej tabeli `user` w bazie `mysql`.
-- Wyświetlenie nazwy użytkownika i hosta dla wszystkich kont w systemie SELECT User, Host FROM mysql.user;
Zgodnie z zasadą najmniejszych uprawnień, do pracy z aplikacją nie powinno się używać konta `root`. Stwórzmy dedykowane konto `recepcja` i nadajmy mu uprawnienia tylko do bazy `test_hotel`.
-- Utworzenie nowego użytkownika 'recepcja' dla połączeń lokalnych CREATE USER 'recepcja'@'localhost' IDENTIFIED BY 'HasloDlaRecepcji!'; -- Nadanie uprawnień (SELECT, INSERT, UPDATE, DELETE) do wszystkich tabel (*) w bazie 'test_hotel' GRANT SELECT, INSERT, UPDATE, DELETE ON test_hotel.* TO 'recepcja'@'localhost'; -- Ponowne przeładowanie uprawnień FLUSH PRIVILEGES;
Jeśli konto nie jest już potrzebne, należy je usunąć, aby nie stanowiło potencjalnej luki w bezpieczeństwie.
-- Usunięcie użytkownika 'recepcja' z hostem 'localhost' DROP USER 'recepcja'@'localhost';
Zarządzanie użytkownikami i ich uprawnieniami jest absolutnym filarem bezpieczeństwa każdej bazy danych. To zadanie w sposób praktyczny pokazało, że domyślna konfiguracja serwera, szczególnie w środowiskach deweloperskich takich jak XAMPP, jest często niezabezpieczona i wymaga natychmiastowej interwencji. Ustawienie silnego hasła dla konta `root` jest pierwszym i najważniejszym krokiem. Jednak prawdziwe bezpieczeństwo zaczyna się od zrozumienia i świadomego stosowania mechanizmu `uzytkownik@host` oraz zasady najmniejszych uprawnień. Kluczowym wnioskiem płynącym z tego ćwiczenia jest to, że nigdy nie należy używać konta `root` do codziennej pracy aplikacji. Zamiast tego, należy tworzyć dedykowane konta dla każdej aplikacji lub użytkownika, nadając im tylko te uprawnienia, które są absolutnie niezbędne do wykonywania ich zadań. Takie podejście, znane jako "defense in depth" (obrona w głąb), znacząco minimalizuje potencjalne szkody w przypadku, gdyby hasło do jednego z kont wpadło w niepowołane ręce. Umiejętność swobodnego posługiwania się poleceniami `CREATE USER`, `ALTER USER`, `GRANT` i `DROP USER` jest fundamentalną kompetencją każdego administratora i dewelopera baz danych.