W języku SQL wykonano przedstawione polecenia GRANT. Kto otrzymał prawo do usuwania rekordów z tabel bazy firma?
GRANT ALL ON firma.* TO 'ewa'@'localhost'; GRANT SELECT, DELETE ON firma.* TO 'piotr'@'localhost'; GRANT CREATE, DROP, INDEX ON firma.* TO 'marek'@'localhost';
Poprawna jest odpowiedź: Ewa i Piotr. Usuwanie rekordów to operacja DELETE. Piotr dostał ją wprost, obok SELECT, a Ewa otrzymała ALL, czyli wszystkie uprawnienia do bazy (poza nadawaniem ich innym, które wymaga WITH GRANT OPTION). Zapis firma.* oznacza wszystkie tabele bazy firma.
Do zapamiętania: uprawnienia dzielą się na operacje na danych (SELECT, INSERT, UPDATE, DELETE) i operacje na strukturze (CREATE, ALTER, DROP, INDEX). Nadane prawa sprawdza się poleceniem SHOW GRANTS FOR 'piotr'@'localhost';, a odbiera poleceniem REVOKE.
Uprawnienia nadaje się zgodnie z zasadą najmniejszych przywilejów - każdy dostaje tylko to, czego potrzebuje.
Najczęstsza pomyłka to uznanie, że DROP usuwa rekordy. DROP usuwa całe obiekty bazy - tabele, widoki albo samą bazę - razem z ich strukturą. Marek może więc skasować tabelę w całości, ale nie ma prawa DELETE, czyli usuwania wybranych wierszy przy zachowaniu tabeli. Dlatego zestawy z Markiem odpadają.
Odpowiedź „tylko Piotr” pomija skrót ALL. Ewa nie ma w poleceniu wymienionego słowa DELETE, ale ALL obejmuje wszystkie uprawnienia na wskazanym poziomie, w tym usuwanie rekordów. Czytając polecenia GRANT, warto przypisać każdej osobie pełną listę praw, rozwijając ALL, i dopiero wtedy szukać tego jednego, o które pyta zadanie. Przy pytaniu o dane liczą się SELECT, INSERT, UPDATE i DELETE.
Z tego samego powodu prawo DROP daje się zwykle tylko administratorowi, a nie użytkownikom aplikacji.