W języku MySQL należy zastosować polecenie REVOKE, aby użytkownikowi anna odebrać prawo do dokonywania zmian jedynie w definicji struktury bazy danych. Polecenie odpowiadające odebraniu tych praw ma postać
A.
REVOKE ALL ON tabela1 FROM 'anna'@'localhost'
B.
REVOKE CREATE, ALTER, DROP ON tabela1 FROM 'anna'@'localhost'
C.
REVOKE CREATE, UPDATE, DROP ON tabela1 FROM 'anna'@'localhost'
D.
REVOKE CREATE, INSERT, DELETE ON tabela1 FROM 'anna'@'localhost'
Opracowane na podstawie zadania CKE, styczeń 2017 (arkusz E.14-X-17.01): W arkuszu uprawnienia wypisano bez przecinków (REVOKE CREATE ALTER DROP). Składnia REVOKE w MySQL wymaga rozdzielenia uprawnień przecinkami.
W tym zadaniu kluczowe jest rozróżnienie uprawnień dotyczących struktury bazy danych od uprawnień dotyczących samych danych. Polecenie REVOKE CREATE, ALTER, DROP ON tabela1 FROM 'anna'@'localhost' odbiera użytkownikowi anna prawa typu DDL, czyli związane z definiowaniem i zmianą obiektów bazy danych. CREATE pozwala tworzyć nowe obiekty, ALTER zmieniać ich strukturę, na przykład dodać kolumnę do tabeli, a DROP usuwać obiekty, np. całą tabelę. To są właśnie operacje ingerujące w definicję struktury. Co ważne, takie polecenie nie odbiera automatycznie praw do pracy na rekordach, czyli np. SELECT, INSERT, UPDATE czy DELETE, jeżeli użytkownik nadal je posiada. Moim zdaniem to bardzo praktyczny przykład zasady najmniejszych uprawnień: użytkownik powinien mieć tylko te prawa, które są mu realnie potrzebne. W administracji MySQL często oddziela się osoby projektujące schemat bazy od osób tylko wprowadzających dane. Dzięki temu przypadkowe ALTER albo DROP nie rozwali nam tabeli produkcyjnej, a to w praktyce naprawdę ma znaczenie.
Jeżeli wybrana została inna komenda, problem najczęściej wynika z pomieszania dwóch grup uprawnień w MySQL: DDL i DML. Operacje DDL, takie jak CREATE, ALTER oraz DROP, dotyczą definicji obiektów bazy danych, czyli tabel, widoków, indeksów albo całych baz. To one zmieniają strukturę: tworzą tabelę, dodają kolumnę, zmieniają typ pola albo usuwają obiekt. Właśnie te prawa trzeba odebrać, gdy użytkownik nie ma już móc zmieniać schematu bazy. Polecenie REVOKE ALL jest zbyt szerokie, bo odbiera wszystkie przyznane uprawnienia w danym zakresie, nie tylko te związane ze strukturą. To może przypadkiem zablokować użytkownikowi także odczyt danych albo normalną pracę z rekordami, więc z punktu widzenia dobrej administracji jest to mało precyzyjne. Z kolei UPDATE, INSERT i DELETE nie dotyczą definicji tabeli, tylko danych zapisanych w tabeli. UPDATE zmienia wartości w istniejących rekordach, INSERT dodaje nowe rekordy, a DELETE je usuwa. To są operacje DML, czyli manipulacja danymi, nie strukturą. Częsty błąd myślowy polega na tym, że słowo UPDATE kojarzy się ogólnie ze zmianą, ale w SQL oznacza zmianę zawartości wierszy, a nie np. dodanie kolumny. W praktyce warto zawsze pytać: czy ta operacja zmienia projekt tabeli, czy tylko jej zawartość? Tutaj chodziło wyłącznie o projekt, więc potrzebne są CREATE, ALTER i DROP.