Za pomocą którego zapytania Administrator odbierze prawo przeglądania oraz aktualizacji danych w bazie gazeta dla użytkownika redaktor?
A.
REVOKE SELECT, ALTER ON gazeta.* FROM 'redaktor'@'localhost';
B.
GRANT SELECT, ALTER ON gazeta.* TO 'redaktor'@'localhost';
C.
GRANT SELECT, UPDATE ON gazeta.* TO 'redaktor'@'localhost';
D.
REVOKE SELECT, UPDATE ON gazeta.* FROM 'redaktor'@'localhost';
Pytanie z egzaminu CKE, styczeń 2021 (arkusz EE.09-SG-21.01).
To zapytanie używa instrukcji REVOKE, czyli polecenia SQL służącego do odbierania wcześniej nadanych uprawnień użytkownikowi. W tym przypadku odbierane są dwa konkretne prawa: SELECT, czyli możliwość odczytywania danych, oraz UPDATE, czyli możliwość modyfikowania istniejących rekordów. Fragment ON gazeta.* oznacza, że cofnięcie uprawnień dotyczy wszystkich tabel w bazie danych gazeta. Z kolei FROM 'redaktor'@'localhost' wskazuje konto użytkownika, któremu te prawa zostaną odebrane, ale tylko dla logowania z hosta localhost. To jest typowa składnia MySQL/MariaDB: REVOKE uprawnienia ON obiekt FROM użytkownik. W praktyce takie polecenie stosuje administrator, gdy np. redaktor nie powinien już widzieć treści artykułów albo nie ma mieć możliwości poprawiania rekordów w panelu. Moim zdaniem warto zapamiętać różnicę: GRANT nadaje uprawnienia, a REVOKE je odbiera. Dobra praktyka branżowa mówi też, żeby nadawać tylko minimalne potrzebne uprawnienia, czyli zasada najmniejszych uprawnień. Dzięki temu nawet jeśli konto zostanie przejęte, szkody są mniejsze.
W tym pytaniu kluczowe jest rozróżnienie dwóch rzeczy: jaką operację wykonujemy na uprawnieniach oraz jakich dokładnie praw dotyczy polecenie. Jeżeli administrator ma odebrać możliwość przeglądania i aktualizacji danych, to potrzebne są uprawnienia SELECT oraz UPDATE, a sama instrukcja musi być instrukcją REVOKE. SELECT odpowiada za odczyt danych z tabel, na przykład przez zapytania typu SELECT * FROM artykuly. UPDATE pozwala zmieniać już istniejące rekordy, czyli np. poprawić tytuł artykułu albo status publikacji. ALTER to zupełnie inne uprawnienie, związane ze zmianą struktury tabeli, na przykład dodaniem kolumny, zmianą typu pola albo modyfikacją indeksów. To nie jest aktualizacja danych, tylko modyfikacja schematu bazy. Częsty błąd polega na tym, że ktoś kojarzy słowo alter jako zmianę i wrzuca je do jednego worka z UPDATE, a w SQL to są naprawdę różne poziomy działania. Drugim typowym nieporozumieniem jest użycie GRANT. GRANT służy do nadawania uprawnień, więc zadziała dokładnie odwrotnie niż oczekujemy. Jeśli administrator użyłby GRANT SELECT, UPDATE ON gazeta.* TO 'redaktor'@'localhost', to użytkownik dostałby prawo odczytu i modyfikacji danych, zamiast je stracić. W MySQL składnia też ma znaczenie: przy nadawaniu używa się TO, a przy odbieraniu FROM. Z mojego doświadczenia najlepiej czytać takie polecenia jak zdanie po polsku: odbierz SELECT i UPDATE na gazeta.* od użytkownika redaktor z localhost. Wtedy łatwiej nie pomylić kierunku działania.