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: DCL w SQL GRANT w SQL

GRANT SELECT ON hurtownia.* TO 'sprzedawca'@'localhost'; Podane w ramce polecenie SQL nadaje prawo SELECT

GRANT SELECT ON hurtownia.* TO 'sprzedawca'@'localhost';
Podane w ramce polecenie SQL nadaje prawo SELECT
A. do wszystkich tabel w bazie hurtownia.
B. do wszystkich pól w tabeli hurtownia.
C. dla użytkownika root na serwerze localhost.
D. dla użytkownika root na serwerze sprzedawca.

Pytanie z egzaminu CKE, styczeń 2020 (arkusz E.14-SG-20.01).

Polecenie GRANT SELECT ON hurtownia.* TO 'sprzedawca'@'localhost'; nadaje użytkownikowi sprzedawca, logującemu się z hosta localhost, uprawnienie SELECT do wszystkich tabel znajdujących się w bazie danych hurtownia. Kluczowy jest zapis hurtownia.*, gdzie część przed kropką oznacza nazwę bazy danych, a gwiazdka po kropce oznacza wszystkie obiekty tabelaryczne w tej bazie, najczęściej po prostu wszystkie tabele. Nie chodzi tu o wszystkie pola jednej tabeli, bo tabela nie została wskazana z nazwy. Gdybyśmy chcieli nadać uprawnienie tylko do jednej tabeli, zapis wyglądałby np. hurtownia.produkty. W praktyce takie polecenie stosuje administrator bazy, gdy chce dać komuś dostęp tylko do odczytu danych, bez możliwości ich zmiany. To jest zgodne z zasadą najmniejszych uprawnień: użytkownik dostaje tylko to, co jest mu potrzebne. Moim zdaniem to jedna z ważniejszych dobrych praktyk w SQL, bo ogranicza ryzyko przypadkowego usunięcia albo modyfikacji danych.
W tym poleceniu łatwo pomylić kilka rzeczy, bo składnia GRANT jest krótka, ale ma konkretne znaczenie. Zapis hurtownia.* nie oznacza wszystkich pól w tabeli o nazwie hurtownia. W SQL po lewej stronie kropki zwykle podaje się bazę danych, a po prawej tabelę lub symbol wieloznaczny. Gwiazdka w tym miejscu nie odnosi się do kolumn tak jak w zapytaniu SELECT * FROM tabela, tylko do wszystkich tabel w podanej bazie. To częsty błąd myślowy: ktoś widzi SELECT i *, więc od razu kojarzy to z pobieraniem wszystkich kolumn, ale w poleceniu GRANT kontekst jest inny. Równie ważne jest odczytanie części TO 'sprzedawca'@'localhost'. Ona wskazuje konto użytkownika, któremu nadajemy uprawnienia, a nie konto root. Użytkownik root w ogóle nie pojawia się w tym poleceniu, więc nie można zakładać, że to jego dotyczą przywileje. W MySQL konto składa się z nazwy użytkownika oraz hosta, z którego może się łączyć. Dlatego 'sprzedawca'@'localhost' oznacza użytkownika sprzedawca dostępnego lokalnie na serwerze bazy. Nie oznacza też użytkownika root na serwerze sprzedawca, bo sprzedawca jest nazwą konta, a localhost nazwą hosta. Z mojego doświadczenia warto zawsze czytać GRANT według schematu: jakie uprawnienie, na jakim obiekcie, dla jakiego użytkownika i z jakiego hosta. Wtedy takie pytania robią się dużo prostsze.

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.