Tworzenie kont MySQL i MariaDB, znaczenie nazwy i hosta oraz przydzielanie i odbieranie dostępu do bazy. Sprawdzenie uprawnień i konfiguracja pracy wielu użytkowników. Lekcja 9.1 kursu INF.03.
Konto bazy danych to tożsamość, którą serwer rozpoznaje przy połączeniu i której przydziela określone uprawnienia. Na egzaminie trzeba utworzyć użytkownika, nadać dostęp i rozpoznać zakres polecenia GRANT. W aplikacji konto bazy jest używane przez skrypt PHP i nie musi odpowiadać pojedynczemu klientowi sklepu.
Nazwa i host tworzą konto
W MySQL konto opisuje para: nazwa użytkownika oraz host, czyli miejsce, z którego może pochodzić połączenie. Konto o nazwie raport z hosta localhost jest inne niż konto raport z konkretnego zdalnego komputera. Te konta mogą mieć różne hasła i uprawnienia. Host nie oznacza nazwy bazy ani serwera, do którego właśnie się łączymy; opisuje źródło połączenia klienta.
Obie części zapisuje się oddzielnie, w apostrofach. Symbol łączący je to znak @. Przykłady postaci konta są następujące:
'raport'@'localhost'
'raport'@'192.0.2.20'
Pierwszy przykład dotyczy klienta lokalnego, drugi wskazanego hosta. Adres 192.0.2.20 jest tu adresem dokumentacyjnym, a nie rzeczywistym komputerem do podłączenia. Nie zakładaj, że localhost oraz 127.0.0.1 w konfiguracji każdego klienta prowadzą do identycznego sposobu połączenia i wyboru konta. Metoda połączenia oraz reguły dopasowania mają znaczenie. Zapis kont opisuje dokumentacja MySQL. Konto systemu operacyjnego, konto bazy i użytkownik aplikacji to odrębne poziomy. Klient sklepu może logować się adresem e-mail, ale jego żądania serwer obsłuży jednym technicznym kontem bazy. Utworzenie klienta w tabeli nie tworzy automatycznie konta MySQL. Analogicznie utworzenie konta MySQL nie dodaje osoby do tabeli klientów.
Utworzenie użytkownika
CREATE USER (UTWÓRZ UŻYTKOWNIKA) tworzy konto. Fragment IDENTIFIED BY określa hasło używane przy uwierzytelnieniu. Polecenie wykonuje administrator mający odpowiednie uprawnienia, a nie dowolne konto aplikacji. Poniższe hasło jest wyłącznie przykładem składni i nie powinno zostać użyte na rzeczywistym serwerze.
CREATE USER 'raport'@'localhost'
IDENTIFIED BY 'Przyklad-Tylko-Do-Cwiczen!47';
Utworzone konto nie otrzymuje przez to prawa czytania tabel sklepu. Oddzielenie tworzenia konta od nadawania dostępu pozwala ustalić zakres w kolejnym kroku. W MySQL 8 nie używa się GRANT jako zastępstwa CREATE USER. Starsze przykłady łączące te operacje nie są właściwym wzorcem do nowych ćwiczeń.
Hasło nie powinno trafiać do publicznego repozytorium, zrzutu oddawanego bez potrzeby ani wiadomości wysyłanej wszystkim członkom zespołu. Konfigurację połączenia udostępnia się tylko osobom i procesom, które jej potrzebują. Konto root ma szerokie uprawnienia administracyjne, dlatego wygoda lokalnego ćwiczenia z takim kontem nie jest dobrym wzorcem konfiguracji publicznej aplikacji.
GRANT określa czynność i zakres
GRANT (NADAJ) wskazuje dozwolone operacje, obiekty i konto odbiorcy. SELECT pozwala odczytywać dane, INSERT dopisywać rekordy, UPDATE zmieniać, a DELETE usuwać. CREATE, ALTER i DROP dotyczą tworzenia, zmiany i usuwania obiektów. Same nazwy poleceń danych są opisane w dziale SQL; tutaj decydujemy, kto może je wykonać. GRANT SELECT ON sklep.* TO 'raport'@'localhost';
GRANT SELECT, INSERT ON sklep.zamowienie
TO 'formularz'@'localhost';
Pierwsza instrukcja pozwala istniejącemu kontu raport czytać tabele bazy sklep. Druga jest osobnym przykładem dla wcześniej utworzonego konta formularz: może czytać i dopisywać w tabeli zamowienie. Gwiazdka po nazwie bazy rozszerza zakres na jej obiekty; brak gwiazdki ogranicza go do podanej tabeli. Te instrukcje zakładają, że wskazane konta i baza już istnieją.
Zakres globalny zapisuje się jako dwie gwiazdki rozdzielone kropką. Zakres bazy to nazwa bazy i gwiazdka, a zakres tabeli nazwa bazy i nazwa tabeli. Rozróżnienie jest ważniejsze od długości listy operacji. Jedno prawo SELECT dla wszystkich baz może ujawniać więcej niż kilka praw do jednej tabeli. Dobór zakresu opisuje instrukcja GRANT. ALL PRIVILEGES (WSZYSTKIE UPRAWNIENIA) obejmuje uprawnienia możliwe do nadania na wskazanym poziomie. Nie znaczy automatycznie wszystkich praw na całym serwerze. WITH GRANT OPTION dodatkowo pozwala przekazywać posiadane prawa w danym zakresie. Konto do wyświetlania raportów zwykle nie potrzebuje ani zarządzania strukturą, ani nadawania praw innym. Zasada najmniejszych uprawnień ogranicza skutki błędu aplikacji.
Odebranie i sprawdzenie dostępu
REVOKE (ODBIERZ) cofa nadane uprawnienie, ale nie usuwa konta ani danych. W typowym ćwiczeniu należy wskazać ten sam poziom obiektu, na którym prawo zostało wcześniej nadane. Oto odebranie prawa odczytu z poprzedniego przykładu:
REVOKE SELECT ON sklep.* FROM 'raport'@'localhost';
SHOW GRANTS FOR 'raport'@'localhost';
SHOW GRANTS (POKAŻ NADANE UPRAWNIENIA) wyświetla nadania dla konta. Jeśli w wyniku pojawia się USAGE, nie oznacza to prawa czytania wszystkich tabel. To określenie braku przyznanych uprawnień na danym poziomie. Samo istnienie konta i pomyślne logowanie nie dowodzą dostępu do danych.
Po zmianie najlepiej wykonać próbę z nowego połączenia tego użytkownika. Sprawdź operację dozwoloną i taką, która powinna zostać odrzucona. Konto raport mające tylko SELECT powinno odczytać produkty, lecz odmówić dopisania rekordu. Test wykonany nadal jako root nie sprawdza ograniczeń konta raport. To częsta przyczyna mylnego wniosku, że odebranie praw nie zadziałało.
Uprawnienia mogą pochodzić z różnych poziomów lub ról, czyli nazwanych zestawów praw. Odebranie jednego nadania nie jest ogólną regułą zakazującą operacji, jeśli konto nadal otrzymuje ją inną drogą. Przy rozbieżności trzeba sprawdzić pełny wynik SHOW GRANTS i aktywny kontekst sesji. W ćwiczeniach z tej lekcji stosujemy proste, bezpośrednie nadania, aby zakres był jednoznaczny.
Po CREATE USER, GRANT i REVOKE nie trzeba rutynowo dopisywać FLUSH PRIVILEGES (ODŚWIEŻ UPRAWNIENIA). Serwer obsługuje zmiany wykonane tymi instrukcjami. Nie edytujemy ręcznie tabel systemowych z uprawnieniami. Szczegóły momentu obowiązywania zmiany zależą od rodzaju prawa i istniejących połączeń, co jest dodatkowym powodem testowania świeżej sesji.
Wiele osób i bezpieczna konfiguracja
Praca wielu użytkowników wymaga rozdzielenia zadań. Administrator zarządza strukturą i kontami, aplikacja wykonuje potrzebne operacje, a konto raportowe czyta dane. Jeżeli dwie osoby zmieniają ten sam rekord, spójność operacji zależy także od transakcji i reguł bazy. Same konta rozwiązują problem dostępu, ale nie zastępują mechanizmu poprawnego zapisywania zmian.
Zdalny dostęp wymaga kilku zgodnych ustawień: serwer musi nasłuchiwać na właściwym interfejsie, zapora dopuszczać połączenie, a konto pasować do źródła. Otwieranie portu wszystkim adresom nie naprawia błędnego hasła. Na rzeczywistym serwerze dostęp ogranicza się do potrzebnych hostów, chroni transmisję i sprawdza dzienniki połączeń. Zmiana pojedynczego parametru bez sprawdzenia pozostałych nie daje pełnej konfiguracji.
phpMyAdmin jest klientem administracyjnym działającym przez WWW. Jego panel użytkowników ułatwia tworzenie kont i ustawianie praw, ale nadal wykonuje operacje serwera bazy. Zmiana wyglądu panelu nie zmienia znaczenia nazwy i hosta. Po kliknięciu zatwierdzenia należy odczytać wynik, a następnie sprawdzić konto odpowiednim połączeniem.
Na egzaminie
Czytaj instrukcję od środka: jakie operacje, na jakich obiektach i dla którego konta. GRANT SELECT na całej bazie nie daje INSERT, a REVOKE nie usuwa użytkownika. Konto zapisane z innym hostem jest innym kontem nawet przy tej samej nazwie. Odwrócenie TO i FROM psuje składnię: nadajemy TO, odbieramy FROM.
Pułapka: poprawne hasło potwierdza tożsamość konta, ale nie nadaje mu dostępu do tabel. Uwierzytelnianie i uprawnienia mają odrębne zadania.
W zadaniu praktycznym zachowaj wymaganą nazwę i zakres praw. Nie poszerzaj ich dla wygody, gdy pierwsze połączenie zostanie odrzucone. Sprawdź komunikat, host, nazwę bazy i użytkownika, a dowód wykonania przygotuj bez ujawniania hasła.
Ściąga
nazwa i host
razem identyfikują konto
CREATE USER
utworzenie konta
REVOKE
odebranie konkretnego nadania
SHOW GRANTS
sprawdzenie przydzielonych praw
sklep.*
obiekty jednej bazy
sklep.produkt
jedna tabela
WITH GRANT OPTION
możliwość przekazywania praw
Pobierz ściągę PDF