GRANT SELECT, INSERT ON klienci TO jan; REVOKE INSERT ON klienci FROM jan; Jakie uprawnienia będzie miał użytkownik jan po wykonaniu na bazie danych...
GRANT SELECT, INSERT ON klienci TO jan; REVOKE INSERT ON klienci FROM jan;Jakie uprawnienia będzie miał użytkownik jan po wykonaniu na bazie danych przedstawionych poleceń, jeżeli wcześniej nie miał żadnych uprawnień?
A. Będzie mógł usuwać rekordy z tabeli klienci.
B. Będzie mógł zmienić strukturę tabeli klienci.
C. Będzie mógł wstawiać rekordy do tabeli klienci.
D. Będzie mógł wyszukiwać dane w tabeli klienci.
Po wykonaniu tych dwóch poleceń użytkownik jan będzie miał prawo SELECT do tabeli klienci, czyli będzie mógł wyszukiwać i odczytywać dane z tej tabeli. Najpierw instrukcja GRANT SELECT, INSERT ON klienci TO jan; nadaje mu dwa uprawnienia: odczyt danych oraz dodawanie nowych rekordów. Potem instrukcja REVOKE INSERT ON klienci FROM jan; odbiera tylko uprawnienie INSERT. Nie cofa ona całego wcześniejszego GRANT-a, tylko konkretnie wskazane prawo. W efekcie SELECT zostaje. W praktyce jan mógłby wykonać np. zapytanie SELECT * FROM klienci;, ale nie powinien móc zrobić INSERT INTO klienci (...), bo to wymaga uprawnienia INSERT. Nie dostaje też automatycznie DELETE ani ALTER, bo każde z tych uprawnień jest osobne. Moim zdaniem to dobry przykład zasady najmniejszych uprawnień: użytkownik powinien mieć tylko te prawa, które są mu faktycznie potrzebne do pracy. W administracji bazami danych takie rozdzielanie praw jest bardzo ważne, bo ogranicza ryzyko przypadkowej modyfikacji danych albo nadużyć.
W tym przykładzie łatwo pomylić samo nadanie uprawnień z ich końcowym stanem po wykonaniu wszystkich poleceń. Polecenie GRANT SELECT, INSERT rzeczywiście na początku daje użytkownikowi jan możliwość odczytywania danych oraz wstawiania nowych rekordów do tabeli klienci. Jednak zaraz potem pojawia się REVOKE INSERT, czyli cofnięcie prawa do operacji INSERT. To oznacza, że możliwość dodawania rekordów nie zostaje na końcu, mimo że przez chwilę była nadana. Typowy błąd polega na tym, że ktoś patrzy tylko na pierwszą linijkę SQL i ignoruje drugą, a w bazach danych kolejność wykonania poleceń ma konkretne znaczenie. Nie można też założyć, że skoro użytkownik ma dostęp do tabeli, to może robić na niej wszystko. SELECT pozwala czytać dane, INSERT pozwala dodawać rekordy, DELETE usuwać rekordy, a ALTER zmieniać strukturę tabeli, na przykład dodać kolumnę albo zmienić jej typ. Te prawa są niezależne i muszą być nadane osobno. Użytkownik jan wcześniej nie miał żadnych uprawnień, więc nie odziedziczył tutaj prawa do usuwania ani modyfikacji struktury tabeli. Z mojego doświadczenia to właśnie rozróżnienie między odczytem, modyfikacją danych i modyfikacją schematu jest kluczowe przy pracy z SQL. Dobra praktyka administracyjna mówi, żeby nie dawać uprawnień na zapas, bo potem trudniej kontrolować bezpieczeństwo i odpowiedzialność za zmiany w bazie.