INF.03 · Bazy danych i SQL
Uprawnienia: komu pozwolić na ile
W firmie księgowa może odczytywać i dodawać faktury, ale nie powinna usuwać całych tabel. Za to odpowiada administrator, który nadaje konta i dobiera dla nich dokładnie tyle uprawnień, ile trzeba. Na koncie root z XAMPP-a możesz wszystko, i właśnie dlatego nie powinna się na nim opierać żadna prawdziwa aplikacja.
- około 35 minut
- CREATE USER · GRANT · REVOKE
- zasada najmniejszych uprawnień
Po tej lekcji: utworzysz konto, nadasz mu minimalne uprawnienia, odbierzesz jedno z nich i sprawdzisz skutek poleceniem SHOW GRANTS.
1 · Słownik
Co oznaczają uprawnienia w MySQL i MariaDB
Uprawnienie to zgoda na jeden rodzaj operacji. Można ją nadać na całą bazę, na jedną tabelę, a nawet na jedną kolumnę.
| Uprawnienie | Pozwala | Kto zwykle go potrzebuje |
|---|---|---|
SELECT | odczytywać dane | każdy, kto ogląda raporty |
INSERT | dodawać rekordy | sprzedawca dodający zamówienia |
UPDATE | zmieniać dane | pracownik poprawiający stany magazynowe |
DELETE | usuwać rekordy | rzadko: administrator danych |
CREATE, ALTER | tworzyć i zmieniać strukturę | programista, administrator |
DROP | usuwać tabele lub bazy | tylko administrator |
ALL PRIVILEGES | wszystko naraz | nikt „na wszelki wypadek” |
2 · Teraz Ty
Nadaj uprawnienia trzem kontom
Baza sklep_muzyczny i trzy role: czytelnik ogląda dane, sprzedawca ogląda produkty i dodaje zamówienia, raporty ma tylko odczyt wszystkiego. Zaznacz uprawnienia dla każdego konta (zakładki). Polecenia GRANT pojawiają się na bieżąco, a testy poniżej od razu pokazują, czy konto robi to, co powinno.
Uprawnienie na „całą bazę” działa też na każdą tabelę. Dlatego konto raporty z SELECT na całą bazę przechodzi testy bez osobnych wpisów dla tabel.
3 · Jak to zapisać
CREATE USER, GRANT i REVOKE
Konta tworzysz poleceniem CREATE USER, uprawnienia nadajesz przez GRANT, a odbierasz przez REVOKE. Zawsze sprawdź skutek poleceniem SHOW GRANTS.
CREATE USER 'czytelnik'@'localhost' IDENTIFIED BY 'Test123!';
GRANT SELECT ON sklep_muzyczny.* TO 'czytelnik'@'localhost';
CREATE USER 'sprzedawca'@'localhost' IDENTIFIED BY 'Test123!';
GRANT SELECT ON sklep_muzyczny.Produkty TO 'sprzedawca'@'localhost';
GRANT SELECT, INSERT ON sklep_muzyczny.Zamowienia TO 'sprzedawca'@'localhost';
REVOKE INSERT ON sklep_muzyczny.Zamowienia FROM 'sprzedawca'@'localhost';
SHOW GRANTS FOR 'sprzedawca'@'localhost';
DROP USER 'czytelnik'@'localhost';
sklep_muzyczny.*oznacza wszystkie tabele tej bazy.sklep_muzyczny.Produktyoznacza jedną tabelę.'czytelnik'@'localhost'konto składa się z nazwy i miejsca, z którego wolno się łączyć.REVOKEodbiera pojedyncze uprawnienie. Pozostałe zostają.FLUSH PRIVILEGES;nie jest potrzebne poGRANTiREVOKE. Potrzebujesz go dopiero po ręcznej edycji tabel systemowych.- Hasło
Test123!to hasło testowe z ćwiczenia. W prawdziwym systemie hasło jest długie i tajne.
| Grants for sprzedawca@localhost |
|---|
GRANT USAGE ON *.* TO sprzedawca@localhost |
GRANT SELECT ON sklep_muzyczny.produkty TO sprzedawca@localhost |
GRANT SELECT ON sklep_muzyczny.zamowienia TO sprzedawca@localhost |
4 · Zanim się pomylisz
Trzy pomyłki w zarządzaniu kontami
Rozwiń każdą z nich.
Praca na koncie root
Aplikacja sklepu łączy się z bazą jako root.Jeśli aplikacja ma lukę (na przykład SQL injection), atakujący dostaje pełne prawa do całego serwera.
Aplikacja używa konta z uprawnieniami SELECT, INSERT, UPDATE tylko na swoich tabelach.Ograniczone konto ogranicza też skutki błędu.
ALL PRIVILEGES „na wszelki wypadek”
GRANT ALL PRIVILEGES ON sklep_muzyczny.* TO 'sprzedawca'@'localhost';Sprzedawca może usunąć dane, a nawet całe tabele. Zwykle potrzebuje tylko odczytu i dodawania zamówień.
GRANT SELECT ON sklep_muzyczny.Produkty TO 'sprzedawca'@'localhost';
GRANT SELECT, INSERT ON sklep_muzyczny.Zamowienia TO 'sprzedawca'@'localhost';Zasada najmniejszych uprawnień: tylko to, co potrzebne do pracy.
Zapomniane sprzątanie kont testowych
-- ćwiczenie skończone, konto zostaje
CREATE USER 'czytelnik'@'localhost' IDENTIFIED BY 'Test123!';Konto z prostym hasłem zostaje na serwerze i staje się furtką.
DROP USER 'czytelnik'@'localhost';Po ćwiczeniu usuń konta testowe.
5 · Sprawdź sam siebie
Zarządzanie kontami: lista kontrolna
Na egzaminie sprawdzane jest, czy umiesz utworzyć użytkownika i określić dla niego uprawnienia.
Podsumowanie
Co warto zapamiętać
CREATE USERtworzy konto,GRANTnadaje uprawnienia,REVOKEje odbiera,SHOW GRANTSpokazuje stan.- Uprawnienia można nadać na bazę, tabelę lub kolumnę.
- Zasada najmniejszych uprawnień: tylko to, co potrzebne.
- Nie pracuj na koncie
rootna co dzień. - Zablokowana operacja kończy się błędem
command denied.
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →