Poprawnie – GRANT i REVOKE to klasyczne polecenia z grupy DCL (Data Control Language) w SQL. DCL służy do zarządzania uprawnieniami do obiektów bazy danych, czyli do kontrolowania kto, co i na czym może wykonać. GRANT nadaje uprawnienia, a REVOKE je odbiera. Z mojego doświadczenia to właśnie te dwa polecenia najczęściej pojawiają się w kontekście bezpieczeństwa baz danych i audytów. W praktyce wygląda to np. tak: administrator tworzy nowe konto użytkownika w systemie (to często robi się na poziomie serwera bazy, nie samego SQL-a), a potem nadaje mu uprawnienia w SQL: GRANT SELECT, INSERT ON tabela_klienci TO nowy_user;. Dzięki temu użytkownik może tylko odczytywać i wstawiać dane do konkretnej tabeli, ale już nie może np. usuwać rekordów czy zmieniać struktury tabeli. Jeśli później trzeba ograniczyć jego możliwości, używa się REVOKE: REVOKE INSERT ON tabela_klienci FROM nowy_user;. W dobrych praktykach administracji bazą danych przyjmuje się zasadę najmniejszych uprawnień (least privilege): użytkownik dostaje tylko takie prawa, których realnie potrzebuje. Właśnie DCL, a więc GRANT i REVOKE, są narzędziem do egzekwowania tej zasady. Co ważne, DCL nie modyfikuje danych ani struktury tabel, tylko politykę dostępu. W większych systemach używa się tych poleceń razem z rolami (ROLE), żeby łatwiej zarządzać uprawnieniami dla całych grup użytkowników, a nie pojedynczo dla każdej osoby. To bardzo ułatwia utrzymanie systemu i poprawia bezpieczeństwo.
W SQL rozróżnienie między DDL, DML i DCL jest kluczowe, bo każdy z tych zestawów poleceń odpowiada za inny obszar pracy z bazą danych. Wiele osób intuicyjnie wrzuca wszystkie komendy „do jednego worka”, a potem trudno jest im zrozumieć, gdzie kończy się manipulacja danymi, a zaczyna zarządzanie uprawnieniami. Data Control Language, czyli DCL, to bardzo wąska, ale ważna grupa poleceń, służąca wyłącznie do kontroli dostępu. W standardowym SQL do DCL zaliczamy praktycznie tylko GRANT i REVOKE. Odpowiedzi typu CREATE i DROP są kuszące, bo też brzmią „administracyjnie”, ale to już inna kategoria – DDL (Data Definition Language). CREATE, ALTER, DROP czy TRUNCATE służą do definiowania i modyfikowania struktury bazy: tworzą tabele, widoki, indeksy, usuwają obiekty. One nie zarządzają prawami użytkowników, tylko tym, jakie obiekty w ogóle istnieją. To, że często wykonuje je administrator, nie znaczy jeszcze, że należą do DCL. Z kolei SELECT, INSERT, UPDATE, DELETE to klasyczne DML (Data Manipulation Language). Te polecenia działają na rekordach: odczytują dane, dodają nowe wiersze, modyfikują istniejące, usuwają je. Typowy błąd myślowy polega na tym, że ktoś myśli: skoro DELETE usuwa dane, to trochę jak „kontrola”, więc może DCL. Niestety nie – DELETE w ogóle nie dotyka uprawnień, ono po prostu kasuje rekordy, o ile użytkownik już ma odpowiednie prawa. Dopiero DCL decyduje, czy użytkownik może wykonać DELETE na danej tabeli. To subtelne, ale bardzo ważne rozróżnienie. Moim zdaniem warto zapamiętać prosty schemat: DDL – struktura, DML – dane, DCL – uprawnienia. Wtedy łatwiej od razu skojarzyć, że tylko GRANT i REVOKE pasują do kategorii Data Control Language, a reszta odpowiedzi dotyczy zupełnie innych warstw pracy z bazą.