0Pricing
SQL Academy · Lekcja

Role i uprawnienia

Przyznawaj i odbieraj dostęp za pomocą GRANT i REVOKE

Role i uprawnienia to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Czym są role i uprawnienia?

W SQL role to nazwane zbiory uprawnień, które można przypisywać użytkownikom. Uprawnienia określają, jakie działania użytkownik lub rola mogą wykonywać na obiektach bazy danych, takich jak tabele, widoki i funkcje.

Zamiast przyznawać uprawnienia każdemu użytkownikowi osobno, tworzy się rolę z wymaganymi uprawnieniami, a następnie przypisuje ją wielu użytkownikom jednocześnie. Dzięki temu zarządzanie kontrolą dostępu na dużą skalę jest znacznie łatwiejsze.

Tworzenie roli

Do zdefiniowania nowej roli w PostgreSQL służy CREATE ROLE. Rola może reprezentować pojedynczego użytkownika lub grupę użytkowników, zależnie od sposobu jej skonfigurowania.

Role są domyślnie tworzone bez uprawnień — dostęp do obiektów trzeba przyznać jawnie.

CREATE ROLE readonly_user;
CREATE ROLE app_writer;
CREATE ROLE db_admin;

Przyznawanie uprawnień do tabel

Instrukcja GRANT przyznaje roli lub użytkownikowi uprawnienia do wykonywania określonych operacji na obiekcie bazy danych. Typowe uprawnienia na poziomie tabeli obejmują SELECT, INSERT, UPDATE i DELETE.

Można przyznać jedno uprawnienie lub wiele uprawnień jednocześnie, oddzielając je przecinkami.

-- Grant SELECT only (read-only role)
GRANT SELECT ON employees TO readonly_user;

-- Grant multiple privileges
GRANT SELECT, INSERT, UPDATE ON orders TO app_writer;

Przyznawanie wszystkich uprawnień

Jeśli rola potrzebuje pełnego dostępu do tabeli, można użyć GRANT ALL PRIVILEGES zamiast wymieniać każde uprawnienie osobno. Spowoduje to przyznanie wszystkich uprawnień mających zastosowanie do określonego obiektu.

Należy zachować ostrożność przy używaniu ALL PRIVILEGES — należy przyznawać je tylko rolom, które rzeczywiście wymagają pełnej kontroli nad obiektem.

-- Grant full access to db_admin on a table
GRANT ALL PRIVILEGES ON employees TO db_admin;

-- Or the shorthand form
GRANT ALL ON orders TO db_admin;

Odbieranie uprawnień

Instrukcja REVOKE odbiera roli lub użytkownikowi wcześniej przyznane uprawnienia. Pozwala to zaostrzyć kontrolę dostępu, gdy zmienią się wymagania lub rola nie będzie już potrzebować określonych uprawnień.

Po wykonaniu REVOKE dana rola natychmiast traci określone uprawnienie do nazwanego obiektu.

-- Remove UPDATE access from app_writer
REVOKE UPDATE ON orders FROM app_writer;

-- Remove all privileges from a role
REVOKE ALL PRIVILEGES ON employees FROM readonly_user;

Przypisywanie roli użytkownikowi

W PostgreSQL użytkownicy są również rolami — rola z atrybutem LOGIN może łączyć się z bazą danych. Rolę grupową przypisuje się roli logowania za pomocą GRANT role TO user.

Po przypisaniu użytkownik dziedziczy wszystkie uprawnienia należące do tej roli, co ułatwia zarządzanie uprawnieniami wielu użytkowników jednocześnie.

-- Create a login user
CREATE ROLE alice WITH LOGIN PASSWORD 'secret123';

-- Assign the readonly role to alice
GRANT readonly_user TO alice;

-- Alice can now SELECT on tables granted to readonly_user

Odbieranie roli użytkownikowi

Aby usunąć przypisanie roli użytkownikowi, należy użyć REVOKE role FROM user. Od tej chwili użytkownik nie dziedziczy już uprawnień związanych z tą rolą.

Jest to przydatne, gdy pracownik zmienia zakres obowiązków lub opuszcza organizację — rolę można mu odebrać bez modyfikowania własnych definicji uprawnień roli.

-- Remove the readonly role from alice
REVOKE readonly_user FROM alice;

-- Alice no longer has SELECT on tables via that role

Uprawnienia na poziomie schematu

Zanim rola uzyska dostęp do jakichkolwiek obiektów wewnątrz schematu, potrzebuje uprawnienia USAGE do tego schematu. Bez niego nawet rola mająca uprawnienie SELECT do konkretnej tabeli nie może odczytać danych, ponieważ nie może rozpoznać ścieżki schematu.

Razem z uprawnieniami na poziomie obiektów należy zawsze przyznać schematowi uprawnienie USAGE.

-- Allow readonly_user to see inside the public schema
GRANT USAGE ON SCHEMA public TO readonly_user;

-- Then grant table-level privilege
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;

Domyślne uprawnienia dla przyszłych obiektów

Gdy w schemacie tworzone są nowe tabele, istniejące role nie uzyskują do nich dostępu automatycznie. Należy użyć ALTER DEFAULT PRIVILEGES, aby obiekty tworzone w przyszłości przez określoną rolę były automatycznie dostępne dla innej roli.

Zapobiega to częstemu problemowi, w którym nowo utworzona tabela jest niewidoczna dla ról aplikacji, dopóki ktoś nie przypomni sobie o ręcznym wykonaniu GRANT.

-- Future tables created by the current user will be SELECTable by readonly_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT ON TABLES TO readonly_user;

-- Future tables will allow INSERT/UPDATE/DELETE for app_writer
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_writer;

Opcja WITH GRANT OPTION

Domyślnie rola, która otrzyma uprawnienie, nie może przekazać go innym rolom. Dodanie WITH GRANT OPTION pozwala odbiorcy przyznać to uprawnienie również innym.

Należy używać tej opcji ostrożnie — oznacza ona, że rola staje się zaufanym punktem delegowania kontroli dostępu, co przy nadmiernym stosowaniu może utrudnić audyt.

-- app_writer can now grant SELECT on orders to other roles
GRANT SELECT ON orders TO app_writer WITH GRANT OPTION;

-- app_writer can then do:
-- GRANT SELECT ON orders TO reporting_role;

Wyświetlanie przyznanych uprawnień

PostgreSQL przechowuje informacje o uprawnieniach w widokach katalogu systemowego. Można wykonać zapytanie do information_schema.role_table_grants, aby sprawdzić, którym rolom przyznano jakie uprawnienia do poszczególnych tabel.

Polecenie odwrotnego ukośnika \dp tablename w psql również wyświetla listę uprawnień dostępu do tabeli w zwartej formie.

-- List all table-level grants in the current database
SELECT grantee, table_schema, table_name, privilege_type
FROM information_schema.role_table_grants
WHERE table_schema = 'public'
ORDER BY grantee, table_name;

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę na temat ról i uprawnień w SQL.

Podsumowanie: role i uprawnienia

W tej lekcji poznano sposób zarządzania kontrolą dostępu w SQL za pomocą ról i uprawnień:

  • CREATE ROLE definiuje nową rolę lub konto użytkownika
  • GRANT przyznaje roli uprawnienia (SELECT, INSERT, UPDATE, DELETE, ALL) do obiektów
  • REVOKE odbiera te uprawnienia
  • GRANT role TO user przypisuje rolę grupową użytkownikowi logującemu się do bazy, aby mógł dziedziczyć jej uprawnienia
  • Role potrzebują uprawnienia USAGE w schemacie, zanim uzyskają dostęp do znajdujących się w nim obiektów
  • ALTER DEFAULT PRIVILEGES zapewnia automatyczny dostęp do przyszłych obiektów
  • WITH GRANT OPTION pozwala odbiorcy przekazywać uprawnienie dalej

Minimalny zakres uprawnień i zarządzanie oparte na rolach to podstawowe zasady bezpiecznego projektowania baz danych — należy przyznawać tylko to, co jest potrzebne, i szybko odbierać uprawnienia, gdy przestają być wymagane.

Często zadawane pytania

Czy lekcja „Role i uprawnienia” jest bezpłatna?

Tak — pełny tekst „Role i uprawnienia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Role i uprawnienia”?

Przyznawaj i odbieraj dostęp za pomocą GRANT i REVOKE Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Role i uprawnienia”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Role i uprawnienia
  2. Zasady bezpieczeństwa na poziomie wierszy
  3. Uprawnienia na poziomie kolumn
  4. Audytowanie dostępu
← Powrót do SQL Academy