DCL (Data Control Language) to podzbiór poleceń SQL, którymi zarządzasz uprawnieniami w bazie danych — czyli decydujesz, kto może co zrobić na konkretnych obiektach (tabelach, widokach, procedurach). Dwa filary tego języka to GRANT (nadaj uprawnienie) i REVOKE (odbierz je). W niektórych systemach, np. Oracle, do DCL bywa też zaliczane DENY (w SQL Serverze) jako jawne zablokowanie dostępu. Krótko: DML rusza dane, DDL rusza strukturę, a DCL rusza klucze do drzwi.
Do czego to służy
DCL realizuje w bazie zasadę least privilege — każdy użytkownik i każda aplikacja dostaje dokładnie tyle uprawnień, ile potrzebuje, i ani uprawnienia więcej. Zamiast łączyć się z bazą jako wszechmocny root czy postgres, tworzysz osobnych użytkowników (a w wielu silnikach całe role), którym przydzielasz konkretne przywileje: SELECT na jednej tabeli, INSERT i UPDATE na innej, EXECUTE na procedurze.
Uprawnienia bywają obiektowe (na tabeli, kolumnie, widoku) albo systemowe/administracyjne (np. prawo tworzenia baz czy użytkowników). Modyfikacja dostępu nie zmienia ani jednego wiersza danych — zmienia tylko to, kto te wiersze zobaczy lub ruszy.
Przykład z praktyki
Masz w PostgreSQL aplikację raportową, która ma tylko czytać. Tworzysz użytkownika i dajesz mu wyłącznie odczyt na jednej tabeli:
GRANT SELECT ON orders TO raporty;
Gdy kontrakt się kończy, odbierasz dostęp jednym poleceniem:
REVOKE SELECT ON orders FROM raporty;
W praktyce rzadko nadajesz uprawnienia osobie wprost — zwykle robisz to przez rolę: tworzysz rolę analityk, nadajesz jej zestaw uprawnień, a potem dopisujesz do niej ludzi. Mniej klikania, mniej pomyłek przy onboardingu i offboardingu.
Na co uważać
Klasyczna pułapka to WITH GRANT OPTION — gdy nadasz komuś uprawnienie z tą opcją, ta osoba może je rozdawać dalej. Łatwo wtedy stracić kontrolę nad tym, kto faktycznie ma dostęp. Drugi mit: że REVOKE jest natychmiastowy i pełny — w MySQL po zmianach uprawnień czasem trzeba odświeżyć je przez FLUSH PRIVILEGES, a w niektórych silnikach uprawnienia odziedziczone przez rolę nie znikną, jeśli nie odbierzesz roli. Pamiętaj też, że GRANT i REVOKE w wielu bazach nie są objęte transakcją tak jak DML — nie zawsze cofniesz je przez ROLLBACK.
Pojęcia powiązane
DCL warto znać razem z DDL (definiowanie struktury), DML (operacje na danych) i TCL (sterowanie transakcjami — COMMIT, ROLLBACK). Z DCL łączą się też pojęcia: rola, użytkownik, przywilej (privilege), RBAC oraz zasada least privilege.