🎯 Cele lekcji

👤

1. Tworzenie i zarządzanie użytkownikami

-- Tworzenie użytkownika (dostęp tylko z localhost)
CREATE USER 'jan'@'localhost' IDENTIFIED BY 'HasloTajne123!';

-- Tworzenie użytkownika (dostęp z dowolnego hosta)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'AppPass!';

-- Zmiana hasła (MySQL 8)
ALTER USER 'jan'@'localhost' IDENTIFIED BY 'NoweHaslo456!';

-- Blokada konta (bez usuwania)
ALTER USER 'jan'@'localhost' ACCOUNT LOCK;
ALTER USER 'jan'@'localhost' ACCOUNT UNLOCK;

-- Usunięcie użytkownika
DROP USER 'jan'@'localhost';

-- Lista użytkowników
SELECT user, host FROM mysql.user;
Użytkownik MySQL jest identyfikowany przez parę: nazwa@host. 'jan'@'localhost' to inny użytkownik niż 'jan'@'%' (% = dowolny host).
🔑

2. GRANT — nadawanie uprawnień

-- Wszystkie uprawnienia do całej bazy
GRANT ALL PRIVILEGES ON sklep.* TO 'jan'@'localhost';

-- Tylko odczyt (SELECT) do całej bazy
GRANT SELECT ON sklep.* TO 'app_readonly'@'%';

-- Konkretne uprawnienia do konkretnej tabeli
GRANT SELECT, INSERT, UPDATE ON sklep.produkty TO 'app_user'@'%';

-- Prawo do zarządzania uprawnieniami (delegacja)
GRANT SELECT ON sklep.* TO 'kierownik'@'localhost' WITH GRANT OPTION;

-- Odświeżenie uprawnień (po GRANT/REVOKE)
FLUSH PRIVILEGES;

-- Sprawdź uprawnienia użytkownika
SHOW GRANTS FOR 'jan'@'localhost';

Dostępne uprawnienia:

UprawnienieOpis
SELECTOdczyt danych
INSERTWstawianie nowych wierszy
UPDATEModyfikacja istniejących wierszy
DELETEUsuwanie wierszy
CREATETworzenie tabel i baz
DROPUsuwanie tabel i baz
ALTERZmiana struktury tabel
ALL PRIVILEGESWszystkie uprawnienia
🚫

3. REVOKE i zasada minimalnych uprawnień

-- Odebranie konkretnego uprawnienia
REVOKE DELETE ON sklep.* FROM 'app_user'@'%';

-- Odebranie wszystkich uprawnień
REVOKE ALL PRIVILEGES ON sklep.* FROM 'jan'@'localhost';
REVOKE GRANT OPTION ON sklep.* FROM 'jan'@'localhost';
FLUSH PRIVILEGES;

-- Role (MySQL 8) — grupowanie uprawnień
CREATE ROLE 'developer', 'readonly', 'admin';

GRANT SELECT, INSERT, UPDATE, DELETE ON sklep.* TO 'developer';
GRANT SELECT ON sklep.* TO 'readonly';
GRANT ALL PRIVILEGES ON sklep.* TO 'admin';

GRANT 'developer' TO 'jan'@'localhost';
GRANT 'readonly' TO 'app_readonly'@'%';
Zasada minimalnych uprawnień (Principle of Least Privilege): Każdy użytkownik powinien mieć tylko te uprawnienia, które są mu niezbędne do pracy. Aplikacja webowa potrzebuje zazwyczaj tylko SELECT, INSERT, UPDATE — nie potrzebuje DROP ani ALTER.
✏️

Zadania interaktywne

Zadanie 1Quiz: co robi FLUSH PRIVILEGES?

Po wykonaniu GRANT lub REVOKE należy zazwyczaj wykonać FLUSH PRIVILEGES;. Co robi to polecenie?

  • Usuwa wszystkich użytkowników z bazy
  • Przeładowuje tablice uprawnień z dysku do pamięci, wymuszając natychmiastowe zastosowanie zmian
  • Czyści pamięć podręczną zapytań (query cache)
  • Restartuje serwer MySQL
Zadanie 2Napisz GRANT dla read-only do tabeli raporty

Napisz polecenie GRANT dające użytkownikowi 'reporter'@'localhost' uprawnienie tylko do odczytu tabeli raporty w bazie sklep:

Zadanie 3Dobierz uprawnienia do roli

Dopasuj zestaw uprawnień do roli użytkownika:

Administrator bazy — pełna kontrola
Aplikacja webowa — CRUD bez modyfikacji struktury
System raportowania — tylko odczyt danych

📌 Zapamiętaj