Wskaż zapytanie SQL, które usuwa konto użytkownika sekretarka zdefiniowane dla hosta localhost.
A.
DROP USER 'sekretarka'@'localhost';
B.
REMOVE USER 'sekretarka'@'localhost';
C.
DELETE USER 'sekretarka'@'localhost';
D.
DROP 'sekretarka'@'localhost';
Polecenie DROP USER 'sekretarka'@'localhost'; jest właściwe, bo w MySQL i MariaDB do usuwania kont użytkowników służy instrukcja DROP USER. Konto użytkownika w tych systemach nie jest opisane tylko samą nazwą, ale parą: nazwa użytkownika oraz host, z którego może się logować. Dlatego 'sekretarka'@'localhost' oznacza konto użytkownika sekretarka dostępne wyłącznie lokalnie, czyli z tej samej maszyny, na której działa serwer bazy danych. To ważny szczegół, bo 'sekretarka'@'%' albo 'sekretarka'@'192.168.1.%' byłyby innymi kontami. Moim zdaniem to jedna z tych rzeczy, które warto zapamiętać praktycznie, nie tylko „pod test”. W administracji bazą danych usunięcie konta wykonuje się właśnie tak, zwykle po wcześniejszym sprawdzeniu uprawnień poleceniem SHOW GRANTS FOR 'sekretarka'@'localhost';. Dobrą praktyką jest też upewnić się, że konto nie jest używane przez aplikację, skrypt kopii zapasowej albo panel administracyjny. DROP USER usuwa konto i jego uprawnienia z systemu uprawnień, więc jest to operacja administracyjna, a nie zwykła operacja na rekordach tabeli. W środowisku produkcyjnym takie zmiany powinny być wykonywane świadomie, najlepiej z odpowiednimi uprawnieniami administratora i po udokumentowaniu zmiany.
W tym pytaniu łatwo pomylić operacje administracyjne z operacjami na danych, bo słowa DELETE, REMOVE i DROP brzmią dość podobnie. W SQL jednak każde z nich ma inne znaczenie albo w ogóle nie jest poprawną składnią w danym kontekście. Konto użytkownika w MySQL usuwa się instrukcją DROP USER, ponieważ użytkownik bazy danych jest obiektem systemowym zarządzanym przez mechanizm uprawnień, a nie zwykłym rekordem, który kasuje się jak dane z tabeli. DELETE służy przede wszystkim do usuwania wierszy z tabel, na przykład DELETE FROM pracownicy WHERE id = 5;. Nie używa się go w formie DELETE USER 'sekretarka'@'localhost';, bo taka składnia nie odpowiada poleceniu administracyjnemu SQL dla kont. Dawniej ktoś mógł kojarzyć ręczne modyfikowanie tabel systemowych, ale obecnie to zła praktyka i można sobie łatwo zrobić bałagan w uprawnieniach. REMOVE USER także nie jest standardowym poleceniem MySQL do usuwania użytkownika. To raczej intuicyjne tłumaczenie z języka angielskiego, ale baza danych nie zgaduje intencji administratora, tylko wymaga konkretnej składni. Samo DROP 'sekretarka'@'localhost'; również nie wystarczy, ponieważ DROP musi wiedzieć, jaki typ obiektu ma zostać usunięty: tabela, baza, widok, procedura albo właśnie użytkownik. Brak słowa USER powoduje, że polecenie jest niepełne i niejednoznaczne. Trzeba też pamiętać o części @'localhost'. W MySQL użytkownik 'sekretarka'@'localhost' to niekoniecznie to samo konto co 'sekretarka'@'%'. Z mojego doświadczenia ten detal często powoduje problemy przy logowaniu i nadawaniu uprawnień, więc warto traktować nazwę użytkownika i host jako komplet.