Dataniedziela, 9 sierpnia 2026 Czas08:03:28
← Bazy danych i SQL

Lekcja 13. Uprawnienia i bezpieczeństwo — kontrola dostępu w SQL

Średni

Po co się tego uczymy?

Nie każdy, kto korzysta z bazy danych, powinien móc usuwać tabele albo zmieniać cudze rekordy. System uprawnień pozwala precyzyjnie określić, kto co może robić — to podstawa bezpieczeństwa każdej prawdziwej aplikacji.

Teoria

Uprawnienia (ang. grants) to zestaw reguł określających, kto ma dostęp do bazy danych i co dokładnie może w niej zrobić. Każdy użytkownik ma własne konto w SZBD, a administrator przyznaje mu konkretne prawa.

Najważniejsze uprawnienia w MySQL/MariaDB:
SELECT — pozwala odczytywać dane.
INSERT — pozwala dodawać nowe rekordy.
UPDATE — pozwala zmieniać dane.
DELETE — pozwala usuwać rekordy.
CREATE — pozwala tworzyć tabele lub bazy.
DROP — pozwala usuwać tabele lub bazy.
ALTER — pozwala modyfikować strukturę tabel.
ALL PRIVILEGES — przyznaje wszystkie uprawnienia naraz.

Domyślnie w XAMPP działa konto root z pełnymi prawami — dobre do nauki, ale w prawdziwym projekcie tworzy się osobne, ograniczone konta dla każdej aplikacji czy pracownika. Do zarządzania uprawnieniami służą polecenia CREATE USER, GRANT (nadaje uprawnienie) i REVOKE (odbiera uprawnienie).

Przykład z życia

W firmowej bazie danych księgowa ma prawo tylko odczytywać i dodawać faktury, ale nie może usuwać całych tabel — o to dba administrator bazy danych, nadając jej precyzyjnie dobrane uprawnienia zamiast pełnego dostępu roota.

Kod (SQL)

-- tworzymy nowego użytkownika bazy danych z hasłem

CREATE USER 'marek'@'localhost' IDENTIFIED BY 'haslo123';

-- dajemy mu prawo tylko do odczytu danych z konkretnej bazy

GRANT SELECT ON sklep.* TO 'marek'@'localhost';

-- dajemy innemu użytkownikowi pełne prawa do jednej bazy

CREATE USER 'ania'@'localhost' IDENTIFIED BY 'inneHaslo456';
GRANT ALL PRIVILEGES ON sklep.* TO 'ania'@'localhost';

-- odbieramy uprawnienie do usuwania danych

REVOKE DELETE ON sklep.* FROM 'ania'@'localhost';

-- zapisujemy zmiany uprawnień

FLUSH PRIVILEGES;

Komentarz i wyjaśnienie kodu

Użytkownik marek dostaje wyłącznie SELECT — może przeglądać dane, ale nie zmieni ani nie usunie niczego. Użytkownik ania najpierw dostaje ALL PRIVILEGES, a potem REVOKE odbiera jej konkretnie prawo do DELETE — to pokazuje, że uprawnienia można precyzyjnie dostrajać, dodając i odbierając pojedyncze prawa niezależnie od siebie. FLUSH PRIVILEGES na końcu każe serwerowi bazy danych ponownie wczytać tabele uprawnień, żeby zmiany od razu zaczęły obowiązywać.

Ćwiczenie samodzielne

Utwórz w swoim środowisku (phpMyAdmin/XAMPP) nowego użytkownika z prawem tylko do odczytu jednej wybranej bazy danych i sprawdź (logując się jako ten użytkownik), że rzeczywiście nie może niczego zmienić.

Zadania do pracy własnej

  1. Zadanie 1. Konta użytkowników w sklepie

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Sklep muzyczny (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Utwórz użytkownika czytelnik z hasłem testowym.
    2. Nadaj czytelnikowi tylko SELECT do całej bazy.
    3. Utwórz użytkownika sprzedawca.
    4. Nadaj sprzedawcy SELECT i INSERT do tabeli Zamowienia.
    5. Nadaj sprzedawcy SELECT do tabeli Produkty.
    6. Odbierz sprzedawcy prawo INSERT.
    7. Pokaż uprawnienia użytkownika poleceniem SHOW GRANTS.
    8. Utwórz użytkownika raporty z dostępem tylko do odczytu.
    9. Wyjaśnij, dlaczego nie nadajemy wszystkim uprawnień ALL PRIVILEGES.
    10. Usuń konto testowe po zakończeniu ćwiczenia.
  2. Zadanie 2. Role w aptece

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Apteka Zdrowie (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Utwórz użytkownika czytelnik z hasłem testowym.
    2. Nadaj czytelnikowi tylko SELECT do całej bazy.
    3. Utwórz użytkownika sprzedawca.
    4. Nadaj sprzedawcy SELECT i INSERT do tabeli Zamowienia.
    5. Nadaj sprzedawcy SELECT do tabeli Produkty.
    6. Odbierz sprzedawcy prawo INSERT.
    7. Pokaż uprawnienia użytkownika poleceniem SHOW GRANTS.
    8. Utwórz użytkownika raporty z dostępem tylko do odczytu.
    9. Wyjaśnij, dlaczego nie nadajemy wszystkim uprawnień ALL PRIVILEGES.
    10. Usuń konto testowe po zakończeniu ćwiczenia.
  3. Zadanie 3. Role w siłowni

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Siłownia FitZone (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Utwórz użytkownika czytelnik z hasłem testowym.
    2. Nadaj czytelnikowi tylko SELECT do całej bazy.
    3. Utwórz użytkownika sprzedawca.
    4. Nadaj sprzedawcy SELECT i INSERT do tabeli Zamowienia.
    5. Nadaj sprzedawcy SELECT do tabeli Produkty.
    6. Odbierz sprzedawcy prawo INSERT.
    7. Pokaż uprawnienia użytkownika poleceniem SHOW GRANTS.
    8. Utwórz użytkownika raporty z dostępem tylko do odczytu.
    9. Wyjaśnij, dlaczego nie nadajemy wszystkim uprawnień ALL PRIVILEGES.
    10. Usuń konto testowe po zakończeniu ćwiczenia.

Typowe błędy

Częsty błąd to praca na koncie root na co dzień, nawet przy zwykłym tworzeniu aplikacji — jeśli aplikacja ma błąd (np. podatność SQL injection), osoba atakująca dostaje pełne prawa do całej bazy. Drugi błąd: zapominanie o FLUSH PRIVILEGES po ręcznej zmianie uprawnień w niektórych scenariuszach. Trzeci: nadawanie ALL PRIVILEGES "na wszelki wypadek" zamiast przemyślenia, jakie uprawnienia są faktycznie potrzebne.

Nawiązanie do egzaminu zawodowego

To bezpośrednio efekt INF.03.4.8 ("zarządza systemem bazy danych") — "tworzy użytkowników bazy danych" i "określa uprawnienia dla użytkowników" to jego jawnie wymienione kryteria weryfikacji.