Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych Administracja serwerem i bezpieczeństwo

Słowa kluczowe: CREATE USER w MySQL DCL w SQL IF NOT EXISTS w MySQL

W języku SQL, aby usunąć konto użytkownika tak, aby nie wystąpił błąd w przypadku, gdy konto nie istnieje, można posłużyć się składnią

A.
DROP USER 'anna'@'localhost';
Źle. Bez IF EXISTS brak konta kończy się błędem #1396.
B.
DROP USER OR IGNORE 'anna'@'localhost';
Źle. OR IGNORE nie jest częścią składni DROP USER.
C.
DELETE USER 'anna'@'localhost';
Źle. Polecenie DELETE USER nie istnieje; obiekty usuwa się przez DROP.
D.
DROP USER IF EXISTS 'anna'@'localhost';
Dobrze. IF EXISTS zamienia błąd przy braku konta w ostrzeżenie.

Klauzula IF EXISTS w poleceniu DROP USER IF EXISTS 'anna'@'localhost'; sprawia, że serwer usuwa konto, jeśli istnieje, a gdy go nie ma - zamiast błędu zgłasza jedynie ostrzeżenie. Skrypt może więc działać dalej bez przerwania.

To lustrzane odbicie klauzuli IF NOT EXISTS przy CREATE USER. Takie zabezpieczenia stosuje się w skryptach instalacyjnych, uruchamianych wielokrotnie, na przykład przy odtwarzaniu środowiska testowego. Konto w MySQL identyfikuje para nazwa i host, więc 'anna'@'localhost' i 'anna'@'%' to dwa różne konta usuwane osobno. Ostrzeżenia można obejrzeć poleceniem SHOW WARNINGS;.

Usunięcie konta zabiera też wszystkie jego uprawnienia, więc nie trzeba wcześniej wykonywać REVOKE.

Zapis DROP USER 'anna'@'localhost'; to poprawne polecenie, ale bez zabezpieczenia. Gdy konta nie ma, serwer zwróci błąd #1396 „Operation DROP USER failed”, a skrypt zatrzyma się w tym miejscu - dokładnie tego zadanie każe uniknąć.

DELETE USER łączy słowo z poleceń usuwania wierszy z nazwą obiektu, ale takie polecenie nie istnieje. DELETE usuwa rekordy z tabel, a konta i inne obiekty bazy usuwa się poleceniem DROP.

Zapis z OR IGNORE przypomina INSERT OR IGNORE z SQLite, a w MySQL INSERT IGNORE. Przy DROP USER taka składnia nie jest rozpoznawana i zakończy się błędem składni. Zadanie spełnia tylko polecenie z klauzulą IF EXISTS, które w razie braku konta zgłasza ostrzeżenie zamiast błędu.

Ta sama klauzula działa przy innych obiektach: DROP TABLE IF EXISTS i DROP DATABASE IF EXISTS także zamieniają błąd w ostrzeżenie.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.