KWALIFIKACJA INF3 - STYCZEŃ 2020

PYTANIE NR 23.
Podane poniżej polecenie SQL nadaje prawo SELECT

GRANT SELECT ON hurtownia.* TO 'sprzedawca'@'localhost';

A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Polecenie
GRANT SELECT ON hurtownia.* TO 'sprzedawca'@'localhost';
nadaje uprawnienie SELECT do wszystkich obiektów typu tabela w bazie (schemacie) hurtownia, bo zapis baza.* oznacza "wszystkie tabele w tej bazie". Konto docelowe to dokładnie 'sprzedawca'@'localhost', nie root.

Pełne wyjaśnienie:

Polecenia typu GRANT należą do SQL (DCL) i służą do nadawania uprawnień. W zapisie:

  • GRANT SELECT – przyznaje prawo wykonywania zapytań odczytujących dane (SELECT).
  • ON hurtownia.* – określa zakres obiektów, których dotyczy uprawnienie. W MySQL zapis nazwa_bazy.* oznacza "wszystkie tabele (i widoki) w tej bazie", a nie pojedynczą tabelę ani kolumny.
  • TO 'sprzedawca'@'localhost' – wskazuje konto, które otrzyma uprawnienie. W MySQL konto jest identyfikowane parą użytkownik/host, więc 'sprzedawca'@'localhost' oznacza logowanie jako sprzedawca wyłącznie z hosta localhost.

Dlatego poprawna interpretacja brzmi: prawo SELECT nadane jest do wszystkich tabel w bazie hurtownia.

Odpowiedź mówiąca o "wszystkich polach" jest błędna, bo składnia hurtownia.* nie schodzi do poziomu kolumn; uprawnienia kolumnowe mają inną postać (wymagają wskazania kolumn w poleceniu). Opcje z użytkownikiem root są błędne, ponieważ w poleceniu wyraźnie podano użytkownika sprzedawca, a dodatkowo host jest określony jako localhost. Również odwrócenie ról (root na serwerze sprzedawca) nie pasuje do składni kont MySQL, gdzie po znaku @ występuje host, a nie nazwa innego użytkownika.

W praktyce takie nadanie uprawnień jest typowe dla kont aplikacyjnych, którym daje się tylko niezbędny zakres praw (zasada najmniejszych uprawnień).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Zapis hurtownia.* oznacza zakres "wszystkie tabele (oraz widoki) w bazie/schemacie hurtownia". Gwiazdka działa na poziomie tabel, a nie na poziomie kolumn, więc nie oznacza "wszystkich pól".
GRANT SELECT nadaje użytkownikowi prawo do odczytu danych poleceniem SELECT. To typowe uprawnienie dla kont używanych przez aplikacje WWW, gdy aplikacja ma tylko wyświetlać dane, bez ich modyfikowania.
W MySQL konto jest definiowane jako para: nazwa użytkownika i host, np. 'sprzedawca'@'localhost'. Dzięki temu można ograniczyć, skąd wolno się logować. To element bezpieczeństwa: uprawnienia mogą działać tylko lokalnie lub z wybranych adresów.
Nie. 'sprzedawca'@'localhost' pozwala logować się tylko z maszyny lokalnej. 'sprzedawca'@'%' (jeśli istnieje) oznacza zwykle dostęp z dowolnego hosta. Różnica wpływa na bezpieczeństwo i na to, które konto MySQL zostanie dopasowane przy logowaniu.
Najczęściej myli się poziomy: studenci uznają baza.* za "wszystkie kolumny", choć chodzi o "wszystkie tabele". Drugi błąd to pomijanie części @'localhost' i traktowanie konta jako globalnego, bez ograniczeń miejsca logowania.
Gdy aplikacja lub użytkownik ma działać na wąskim zakresie danych. Wtedy nadaje się SELECT na konkretną tabelę, aby ograniczyć skutki wycieku danych lub błędu aplikacji. To praktyczne wdrożenie zasady najmniejszych uprawnień.
Uprawnienie INSERT pozwalałoby dodawać nowe wiersze do tabel, a nie tylko je odczytywać. Dla kont aplikacyjnych często rozdziela się role: osobne konta do odczytu (SELECT) i do modyfikacji (INSERT/UPDATE/DELETE), zależnie od potrzeb.
Typowo używa się polecenia SHOW GRANTS dla danego konta. Wynik pokazuje, jakie uprawnienia zostały nadane i na jakim zakresie obiektów. To przydatne przy diagnozowaniu błędów "permission denied" w aplikacji.
Konto administracyjne ma zwykle bardzo szerokie uprawnienia. Użycie go w aplikacji zwiększa ryzyko: błąd aplikacji lub atak może dać pełną kontrolę nad bazą. Lepsze jest konto o minimalnych prawach, np. tylko SELECT na potrzebnych tabelach.
Warto przećwiczyć rozpoznawanie: (1) rodzaju przywileju (SELECT/INSERT/UPDATE), (2) zakresu po ON (baza.*, tabela, czasem kolumny) oraz (3) konta po TO w formacie 'user'@'host'. Pomaga też samodzielne testowanie w MySQL/MariaDB.
info

To pytanie poprawnie rozwiązuje 59% zdających egzamin. średnie

W praktyce zawodowej kluczowe jest to, że konto docelowe to dokładnie 'sprzedawca'@'localhost', nie root.

Źródła:

  • MySQL 8.0 Reference Manual: "GRANT Statement" (składnia GRANT, część ON i TO), https://dev.mysql.com/doc/refman/8.0/en/grant.html - accessed 2026-03-02
  • MySQL 8.0 Reference Manual: "Privileges Provided by MySQL" (zakres i znaczenie przywilejów, w tym SELECT), https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html - accessed 2026-03-02
  • MySQL 8.0 Reference Manual: "MySQL User Account Management" (model kont 'user'@'host'), https://dev.mysql.com/doc/refman/8.0/en/user-account-management.html - accessed 2026-03-02

Materiały:

  • Dokumentacja MySQL: polecenie GRANT i składnia ON db_name.*
  • Materiały szkolne z zakresu DCL w SQL (GRANT/REVOKE) dla poziomu technikum
  • Ćwiczenia praktyczne: tworzenie użytkowników i nadawanie uprawnień w MySQL/MariaDB w środowisku lokalnym

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego