Które z poleceń nadaje najniższy poziom uprawnień użytkownikowi uczen pod względem modyfikacji danych i struktury tabel?
A.
GRANT DROP ON szkola.przedmioty TO uczen;
B.
GRANT ALTER, SELECT ON szkola.przedmioty TO uczen;
C.
GRANT INSERT, DROP ON szkola.przedmioty TO uczen;
D.
GRANT SELECT ON szkola.przedmioty TO uczen;
Pytanie z egzaminu CKE, czerwiec 2020 (arkusz E.14-SG-20.06).
Polecenie GRANT SELECT ON szkola.przedmioty TO uczen; nadaje użytkownikowi uczen najniższy poziom uprawnień spośród podanych możliwości, jeśli patrzymy na modyfikację danych i struktury tabel. SELECT pozwala tylko odczytywać dane z tabeli przedmioty, czyli wykonywać zapytania typu SELECT * FROM szkola.przedmioty;. Użytkownik nie może dopisywać rekordów, usuwać tabeli, zmieniać jej kolumn ani przebudowywać struktury. To jest zgodne z zasadą najmniejszych uprawnień, bardzo ważną w administracji bazami danych: użytkownik dostaje tylko te prawa, które są mu naprawdę potrzebne do pracy. Moim zdaniem to jedna z najważniejszych praktyk bezpieczeństwa, bo jeden źle nadany przywilej potrafi narobić sporo bałaganu. W praktyce konto ucznia w systemie szkolnym mogłoby mieć dostęp tylko do podglądu listy przedmiotów, ocen albo planu zajęć. Do modyfikowania tabel lepiej używać oddzielnych kont, np. dla administratora lub aplikacji z dokładnie opisanym zakresem działania. Dzięki temu ogranicza się ryzyko przypadkowego usunięcia danych, ataku SQL injection albo zwykłej pomyłki użytkownika.
W tym pytaniu łatwo pomylić samo nadawanie uprawnień poleceniem GRANT z poziomem uprawnień, które są faktycznie przekazywane użytkownikowi. Najbezpieczniejsze nie jest to polecenie, które wygląda najkrócej, tylko to, które przyznaje najmniej możliwości ingerencji w dane lub strukturę tabeli. Uprawnienie INSERT pozwala dodawać nowe rekordy do tabeli, więc użytkownik może już zmieniać zawartość bazy. To nie jest tylko odczyt, ale realna modyfikacja danych. Uprawnienie DROP jest jeszcze bardziej ryzykowne, bo pozwala usuwać obiekty bazy, na przykład tabelę. W środowisku produkcyjnym takie prawo daje się bardzo ostrożnie, zwykle tylko administratorom albo kontom technicznym używanym przy migracjach. ALTER również nie jest niskim poziomem dostępu, ponieważ umożliwia zmianę struktury tabeli, np. dodawanie kolumn, zmianę typów danych albo modyfikację definicji obiektu. Nawet jeśli obok ALTER występuje SELECT, to obecność prawa do zmiany struktury powoduje, że zestaw uprawnień jest znacznie szerszy. Typowy błąd myślowy polega na uznaniu, że skoro użytkownik nie ma UPDATE lub DELETE, to dostęp jest mało groźny. W praktyce DROP i ALTER mogą być bardziej niebezpieczne niż zwykła edycja pojedynczych rekordów, bo wpływają na całą tabelę i działanie aplikacji. Z dobrych praktyk wynika, że zwykły użytkownik, taki jak uczen, powinien dostać najwyżej SELECT, jeżeli jego zadaniem jest tylko przeglądanie informacji. Dopiero po konkretnej analizie potrzeb nadaje się szersze prawa, najlepiej osobno dla odczytu, zapisu i administracji strukturą bazy.