Ćwiczenia SQL – Użytkownicy, uprawnienia i bezpieczeństwo bazy danych (INF.03)

1. Tworzenie użytkowników bazy danych

Cel: Uczeń potrafi tworzyć konta użytkowników w systemie baz danych.
Opis: Każdy użytkownik może mieć indywidualny login i hasło. Tworząc użytkowników, administrator określa ich dostęp do serwera i baz danych.
Dlaczego to ważne?
W zadaniach INF.03 często występuje scenariusz: „utwórz użytkownika i przydziel mu określone prawa do bazy”. Dobrze jest rozróżniać użytkownika systemu bazodanowego od użytkownika aplikacji webowej.
-- Tworzenie nowego użytkownika z hasłem
CREATE USER 'projektant'@'localhost' IDENTIFIED BY 'BezpieczneHaslo123';

-- Użytkownik tylko do odczytu
CREATE USER 'uczen'@'%' IDENTIFIED BY 'uczen2025';

-- Sprawdzenie istniejących kont
SELECT user, host FROM mysql.user;
  
Administrator potrafi utworzyć konta dla różnych ról: uczniów, projektantów, testerów.
Częsty błąd:
Tworzenie wszystkich użytkowników tylko na 'localhost', mimo że w zadaniu jest mowa o dostępie z innych hostów (np. '%').

2. Nadawanie i odbieranie uprawnień

Cel: Uczeń potrafi nadawać, odbierać i analizować uprawnienia użytkowników.
Opis: Uprawnienia pozwalają kontrolować, kto może wykonywać operacje w bazie – odczyt, zapis, modyfikację lub zarządzanie strukturą.
Myśl w parach:
GRANT – nadaje prawa do obiektów (baz, tabel, widoków).
REVOKE – odbiera wcześniej nadane prawa.
To para, która bardzo często pojawia się w pytaniach testowych INF.03.
-- Nadanie pełnych uprawnień do bazy 'projekty_it'
GRANT ALL PRIVILEGES ON projekty_it.* TO 'projektant'@'localhost';

-- Uprawnienia tylko do odczytu
GRANT SELECT ON projekty_it.* TO 'uczen'@'%';

-- Cofnięcie uprawnień
REVOKE UPDATE, DELETE ON projekty_it.* FROM 'uczen'@'%';

-- Zastosowanie zmian
FLUSH PRIVILEGES;

-- Sprawdzenie uprawnień
SHOW GRANTS FOR 'projektant'@'localhost';
  
UżytkownikPoziom dostępuZakres
projektantPełny (ALL PRIVILEGES)projekty_it.*
uczenOdczyt (SELECT)projekty_it.*
Uwaga egzaminacyjna:
Często pojawia się pytanie w stylu: „Jak odebrać użytkownikowi prawo do modyfikowania struktury bazy?”. Prawidłowa odpowiedź używa REVOKE, a nie GRANT z innym zestawem praw.

3. Kontrola spójności bazy danych

Cel: Uczeń potrafi sprawdzać integralność i spójność danych w bazie.
Opis: Spójność bazy polega na utrzymaniu poprawnych relacji między tabelami i danych bez błędów logicznych. W SQL można sprawdzić i naprawić błędy w strukturze lub danych.
Co rozumiemy przez spójność?
Dane nie są sprzeczne z założeniami projektu bazy (np. każda pozycja zamówienia ma istniejące zamówienie i produkt), a więzy integralności (klucze obce, CHECK) są przestrzegane.
-- Sprawdzenie integralności tabel
CHECK TABLE Projekty;

-- Sprawdzenie i naprawa bazy danych
REPAIR TABLE Projekty;

-- Weryfikacja relacji i kluczy
SELECT table_name, constraint_name, constraint_type
FROM information_schema.table_constraints
WHERE table_schema = 'projekty_it';
  
Regularna kontrola spójności zapobiega utracie danych i błędom w relacjach.
W praktyce egzaminu:
Częściej będziesz proszony o analizę istniejących więzów (na podstawie zrzutu SHOW CREATE TABLE albo diagramu), niż o fizyczne użycie CHECK TABLE/REPAIR TABLE, ale warto znać te pojęcia.

4. Tworzenie kopii zapasowych i przywracanie bazy

Cel: Uczeń potrafi tworzyć i przywracać kopie zapasowe bazy danych.
Opis: Backupy są kluczowe dla bezpieczeństwa danych. Można je tworzyć w MySQL poleceniem mysqldump lub poprzez SQL w narzędziach graficznych.
Kto może robić backup?
W typowych systemach kopie zapasowe może wykonywać administrator lub użytkownik z odpowiednimi prawami serwerowymi. W pytaniach INF.03 odpowiedź „administrator systemu / serwera baz danych” jest zwykle poprawna.
-- Tworzenie kopii zapasowej bazy z poziomu terminala
mysqldump -u root -p projekty_it > C:\kopie\projekty_it_backup.sql

-- Przywracanie bazy z kopii
mysql -u root -p projekty_it < C:\kopie\projekty_it_backup.sql

-- Kopia tylko jednej tabeli
mysqldump -u root -p projekty_it Klienci > C:\kopie\klienci.sql
  
Tworzenie regularnych kopii zapasowych jest obowiązkiem każdego administratora.
Częsty błąd:
Uczniowie mylą backup bazy (mysqldump) z eksportem pojedynczej tabeli do CSV. W zadaniach INF.03 „kopią zapasową bazy” zawsze będzie plik zawierający całą strukturę i dane, możliwy do odtworzenia.

5. Zadanie końcowe – Bezpieczny system zarządzania użytkownikami

Polecenie:
  • Utwórz trzech użytkowników: admin_it, programista, czytelnik.
  • Nadaj każdemu różne uprawnienia (pełne, częściowe, tylko SELECT).
  • Utwórz kopię zapasową bazy projekty_it i przywróć ją w nowym środowisku testowym.
  • Sprawdź spójność bazy po przywróceniu danych.
Po ukończeniu zadania uczeń potrafi zarządzać użytkownikami, nadawać uprawnienia oraz dbać o integralność i bezpieczeństwo bazy.
Podpowiedź do ról:
admin_it: ALL PRIVILEGES na całym serwerze lub przynajmniej na bazie projekty_it.
programista: SELECT, INSERT, UPDATE, DELETE na tabelach aplikacji, bez uprawnień administracyjnych.
czytelnik: tylko SELECT na wybranych tabelach, zgodnie z zasadą minimalnych uprawnień.