Uprawnienia w SQL – bezpieczeństwo i kontrola dostępu

Wyobraź sobie, że w bibliotece każdy może wejść na zaplecze, kasować książki albo zmieniać autorów.
Brzmi jak chaos, prawda?

W bazie danych jest podobnie.
Nie każdy użytkownik powinien móc usuwać tabele, dodawać dane lub zmieniać cudze rekordy.
Dlatego SQL pozwala dokładnie określić, kto co może robić — za pomocą systemu uprawnień (permissions).


1. Czym są uprawnienia?

Uprawnienia (GRANTS) to zestaw reguł, które określają:

  • kto ma dostęp do bazy danych,
  • co może w niej robić,
  • a czego nie może.

Każdy użytkownik ma swoje konto w systemie bazy danych, a administrator może przyznać mu konkretne prawa:
np. tylko do odczytu danych, tylko do dodawania rekordów albo do wszystkiego.


2. Najczęstsze uprawnienia w MySQL

UprawnienieDziałanie
SELECTpozwala odczytywać dane
INSERTpozwala dodawać nowe rekordy
UPDATEpozwala zmieniać dane
DELETEpozwala usuwać rekordy
CREATEpozwala tworzyć tabele lub bazy
DROPpozwala usuwać tabele lub bazy
ALTERpozwala modyfikować strukturę tabel
ALL PRIVILEGESprzyznaje wszystkie uprawnienia

3. Tworzenie nowego użytkownika

Domyślnie w XAMPP MySQL działa z kontem root, które ma pełne prawa.
Ale możemy stworzyć nowych użytkowników – np. dla uczniów lub testów.

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

To polecenie tworzy użytkownika marek, który może łączyć się z bazy tylko z lokalnego komputera (localhost) i loguje się hasłem haslo123.


4. Nadawanie uprawnień – GRANT

Po utworzeniu użytkownika trzeba nadać mu odpowiednie uprawnienia.

a) Pełny dostęp do całej bazy

GRANT ALL PRIVILEGES ON sklep_muzyczny.* TO 'marek'@'localhost';

Marek ma wszystkie prawa do bazy sklep_muzyczny.


b) Dostęp tylko do odczytu

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

Użytkownik może przeglądać dane, ale nie może ich zmieniać ani usuwać.


c) Dostęp tylko do wybranej tabeli

GRANT SELECT, INSERT ON sklep_muzyczny.Zamowienia TO 'marek'@'localhost';

Marek może przeglądać i dodawać zamówienia, ale nie może zmieniać struktury tabel ani kasować danych.


d) Uprawnienia tylko do jednej operacji

GRANT UPDATE ON sklep_muzyczny.Produkty TO 'marek'@'localhost';

Użytkownik może edytować ceny lub nazwy produktów, ale nie może nic usuwać ani tworzyć nowych rekordów.


5. Cofanie uprawnień – REVOKE

Jeśli ktoś nie powinien już mieć dostępu, możemy mu odebrać konkretne prawa.

REVOKE INSERT, UPDATE ON sklep_muzyczny.Zamowienia FROM 'marek'@'localhost';

Teraz Marek nie może już dodawać ani edytować zamówień, ale jeśli miał inne uprawnienia (np. SELECT), to nadal one działają.


6. Usuwanie użytkownika

DROP USER 'marek'@'localhost';

Konto użytkownika zostaje całkowicie usunięte z systemu MySQL.


7. Sprawdzanie uprawnień użytkownika

Aby zobaczyć, jakie prawa ma użytkownik:

SHOW GRANTS FOR 'marek'@'localhost';

MySQL wyświetli listę przyznanych mu uprawnień.


8. Przykład – różne poziomy dostępu

Wyobraźmy sobie bazę sklep_muzyczny i trzech użytkowników:

UżytkownikUprawnieniaPrzykład zastosowania
rootwszystkie (ALL PRIVILEGES)administrator
sprzedawcaSELECT, INSERT, UPDATE na Zamowienia i Produktymoże obsługiwać sprzedaż
czytelniktylko SELECTmoże przeglądać dane, np. do raportów

Przykład konfiguracji:

CREATE USER 'sprzedawca'@'localhost' IDENTIFIED BY '1234';
CREATE USER 'czytelnik'@'localhost' IDENTIFIED BY 'abcd';

GRANT SELECT, INSERT, UPDATE ON sklep_muzyczny.Zamowienia TO 'sprzedawca'@'localhost';
GRANT SELECT, INSERT, UPDATE ON sklep_muzyczny.Produkty TO 'sprzedawca'@'localhost';

GRANT SELECT ON sklep_muzyczny.* TO 'czytelnik'@'localhost';

9. Zasady bezpieczeństwa

✅ Nie przyznawaj pełnych uprawnień (ALL PRIVILEGES), jeśli nie jest to konieczne.
✅ Twórz osobne konta dla każdego użytkownika – unikaj pracy na root.
✅ Regularnie sprawdzaj i aktualizuj uprawnienia (SHOW GRANTS).
✅ Dla nauki możesz testować różne poziomy dostępu w XAMPP, logując się przez phpMyAdmin lub terminal.


10. Zadania praktyczne

Zadanie 1 – tworzenie użytkownika

  1. Utwórz nowego użytkownika adam z hasłem 12345.
  2. Nadaj mu uprawnienia tylko do odczytu (SELECT) na bazie sklep_muzyczny.
  3. Sprawdź jego uprawnienia poleceniem: SHOW GRANTS FOR 'adam'@'localhost';

Zadanie 2 – użytkownik z ograniczonym dostępem

  1. Utwórz użytkownika kasjer z hasłem kasa2025.
  2. Daj mu prawa do:
    • przeglądania i dodawania zamówień (SELECT, INSERT),
    • modyfikowania produktów (UPDATE).
  3. Cofnij mu prawo do INSERT i sprawdź wynik.

Zadanie 3 – admin pomocniczy

  1. Utwórz użytkownika manager z pełnym dostępem do bazy sklep_muzyczny.
  2. Następnie odbierz mu prawo do DROP, żeby nie mógł usuwać tabel.

Zadanie 4 – kontrola bezpieczeństwa

  1. Utwórz trzech użytkowników: czytelnik, redaktor, admin.
  2. Nadaj im różne poziomy dostępu:
    • czytelnik: tylko SELECT,
    • redaktor: SELECT, INSERT, UPDATE,
    • admin: ALL PRIVILEGES.
  3. Sprawdź uprawnienia wszystkich trzech kont.

11. Podsumowanie

PolecenieDziałaniePrzykład
CREATE USERtworzy nowego użytkownikaCREATE USER 'jan'@'localhost' IDENTIFIED BY '1234';
GRANTnadaje uprawnieniaGRANT SELECT ON baza.* TO 'jan'@'localhost';
REVOKEodbiera uprawnieniaREVOKE INSERT FROM 'jan'@'localhost';
SHOW GRANTSpokazuje aktualne uprawnieniaSHOW GRANTS FOR 'jan'@'localhost';
DROP USERusuwa użytkownikaDROP USER 'jan'@'localhost';

Dzięki uprawnieniom baza danych staje się bezpiecznym systemem, a nie otwartym notesem.
Administrator może dać każdemu dokładnie taki poziom dostępu, jakiego potrzebuje — nic więcej i nic mniej.

To szczególnie ważne na egzaminach INF.03 / INF.04, gdzie jednym z zadań często jest utworzenie użytkownika i nadanie mu określonych uprawnień.