Polecenie w języku SQL GRANT ALL PRIVILEGES ON klienci TO pracownik
Pytanie z egzaminu CKE, wrzesień 2014 (arkusz E.14-X-14.08).
Polecenie GRANT ALL PRIVILEGES ON klienci TO pracownik nadaje wszystkie uprawnienia do tabeli klienci użytkownikowi pracownik. Budowa polecenia jest stała: po GRANT stoją uprawnienia, po ON obiekt, którego dotyczą, a po TO odbiorca. Słowa ALL PRIVILEGES oznaczają komplet praw do obiektu - odczyt, dopisywanie, modyfikację i usuwanie danych oraz pozostałe przywileje tabeli. Do zapamiętania: GRANT nadaje, a REVOKE odbiera uprawnienia. W praktyce administrator rzadko daje wszystko, częściej wymienia tylko potrzebne prawa, np. GRANT SELECT, INSERT ON klienci TO pracownik, żeby ograniczyć skutki pomyłki albo włamania. Uprawnienia można też nadać do całej bazy, zapisując po ON nazwę bazy z gwiazdką, np. sklep.*.
Pułapką jest tu odczytanie nazw w złej roli. Słowo ON wskazuje obiekt - tabelę klienci - a TO wskazuje odbiorcę, czyli użytkownika pracownik. Odpowiedź o nadaniu praw grupie klienci do tabeli pracownik zamienia te role miejscami. Odpowiedź o kopiowaniu uprawnień z grupy klienci zakłada istnienie grupy, której w poleceniu nie ma, a GRANT niczego nie kopiuje - przyznaje wymienione prawa. Odbieranie uprawnień to zadanie polecenia REVOKE, które ma odwrotny kierunek: REVOKE ALL PRIVILEGES ON klienci FROM pracownik. Skoro w poleceniu jest GRANT i ALL PRIVILEGES, poprawne jest nadanie kompletu uprawnień do tabeli klienci użytkownikowi pracownik. Warto czytać takie polecenie jak zdanie: nadaj (GRANT) wszystkie uprawnienia (ALL PRIVILEGES) do tabeli klienci (ON klienci) użytkownikowi pracownik (TO pracownik). Takie tłumaczenie od razu pokazuje, która nazwa oznacza obiekt, a która odbiorcę, i chroni przed zamianą ról.