CodeGym /Kursy /SQL SELF /Tworzenie i zarządzanie rolami: ROLES

Tworzenie i zarządzanie rolami: ROLES

SQL SELF
Poziom 47, Lekcja 1
Dostępny

Rola w PostgreSQL może oznaczać pojedynczego użytkownika albo grupę użytkowników. Zarządza dostępem do baz danych, tabel, schematów i innych obiektów.

Kiedy tworzysz rolę, domyślnie nie jest ona przypisana do konkretnego użytkownika czy grupy, ale możesz nadać jej właściwości i uprawnienia, które pasują do twoich potrzeb.

Różnica między rolami a użytkownikami

A co z użytkownikami? Tu łatwo się pomylić. W PostgreSQL użytkownicy to też role, ale z jedną cechą: użytkownicy zawsze mają możliwość logowania się do systemu. Czyli każda rola może być użytkownikiem, jeśli ma atrybut LOGIN. Jeśli chcesz tylko połączyć użytkowników w grupę albo nie dawać jej możliwości logowania, nie dodawaj atrybutu LOGIN.

Przykład:

  • Rola z atrybutem LOGIN = użytkownik.
  • Rola bez LOGIN = grupa albo "rola techniczna".

Tworzymy rolę

Do tworzenia ról używasz komendy CREATE ROLE. Składnia wygląda tak:

CREATE ROLE <nazwa_roli> [WITH] [parametry];

Gdzie parametry — to właściwości roli, takie jak:

  • LOGIN — możliwość logowania się do bazy danych.
  • CREATEDB — możliwość tworzenia baz danych.
  • CREATEROLE — możliwość tworzenia innych ról.
  • SUPERUSER — pełny dostęp (najbardziej niebezpieczne role, używaj ostrożnie).
  • PASSWORD — hasło do autoryzacji.

Sprawdźmy przykład tworzenia roli użytkownika. Załóżmy, że chcesz stworzyć użytkownika student z prawem logowania i hasłem. Wykonaj taki zapytanie:

CREATE ROLE student WITH LOGIN PASSWORD 'securePassword123';

Ta komenda stworzy rolę o nazwie student, która będzie mogła łączyć się z bazą danych.

Teraz stwórzmy rolę teachers, która będzie grupowa. Rola grupowa nie potrzebuje atrybutu LOGIN, bo użytkownicy w grupie używają swoich własnych kont.

CREATE ROLE teachers;

Nadawanie uprawnień rolom

Role w PostgreSQL są po to, żeby dawać lub ograniczać dostęp do zasobów. Do tego służą komendy GRANT i REVOKE.

Nadawanie praw przez GRANT

Składnia komendy:

GRANT <uprawnienia> ON <obiekt> TO <rola>;

Stwórzmy tabelę courses i dajmy roli teachers prawa do czytania i zmiany danych w tej tabeli.

-- Tworzymy tabelę
CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    teacher_id INT
);

-- Nadajemy dostęp
GRANT SELECT, INSERT, UPDATE ON courses TO teachers;

Teraz wszyscy użytkownicy w roli teachers mogą przeglądać, dodawać i zmieniać dane w tej tabeli.

Odbieranie praw przez REVOKE

Do odbierania praw służy komenda REVOKE. Składnia:

REVOKE <uprawnienia> ON <obiekt> FROM <rola>;

Żeby zabronić grupie teachers aktualizowania danych w tabeli courses, wykonaj komendę:

REVOKE UPDATE ON courses FROM teachers;

Hierarchia ról: dziedziczenie

Użytkownicy mogą "dziedziczyć" uprawnienia od roli-grupy, żeby łatwiej zarządzać dostępem. To jak przekazywanie "spadku" od jednej osoby do drugiej.

Słowo kluczowe INHERIT pozwala roli dziedziczyć uprawnienia od innej roli. To zachowanie jest domyślne, ale można je zmienić.

Przykład:

-- Dodajemy użytkownika `john` do grupy `teachers`
GRANT teachers TO john;

Teraz użytkownik john automatycznie dostaje wszystkie uprawnienia przypisane do roli grupowej teachers.

Sprawdźmy uprawnienia:

\du john

Jeśli chcesz wyłączyć dziedziczenie, rola jest tworzona z atrybutem NOINHERIT.

CREATE ROLE admin NOINHERIT;

Teraz użytkownicy w roli admin nie mogą domyślnie korzystać z jej uprawnień.

Tworzenie grup ról do zarządzania dostępem

Grupy ról ułatwiają zarządzanie dostępem, szczególnie w dużych projektach. Zamiast nadawać prawa każdemu użytkownikowi z osobna, możesz dodać użytkowników do grup, a grupom nadać odpowiednie uprawnienia.

Podajmy prosty przykład roli grupowej. Stwórzmy grupy:

  • students — grupa dla studentów.
  • teachers — grupa dla nauczycieli.
CREATE ROLE students;
CREATE ROLE teachers;

Przypisz użytkowników do grup:

-- Przypisz użytkownika john do grupy students
GRANT students TO john;

-- Przypisz użytkownika jane do grupy teachers
GRANT teachers TO jane;

Teraz, dając dostęp do tabeli grupom students i teachers, automatycznie dajesz go wszystkim ich członkom!

Ćwiczenie praktyczne

  1. Stwórz tabelę exams z polami:
    • id: klucz główny;
    • subject: tekst;
    • teacher_id: ID nauczyciela.
CREATE TABLE exams (
    id SERIAL PRIMARY KEY,
    subject TEXT NOT NULL,
    teacher_id INT
);
  1. Stwórz grupy ról students i teachers.
CREATE ROLE students;
CREATE ROLE teachers;
  1. Daj grupie teachers prawa do dodawania i zmiany danych w tabeli exams.
GRANT INSERT, UPDATE ON exams TO teachers;
  1. Daj grupie students prawo tylko do czytania danych.
GRANT SELECT ON exams TO students;
  1. Stwórz użytkownika alice i dodaj ją do grupy students.
CREATE ROLE alice WITH LOGIN PASSWORD 'alicePassword';
GRANT students TO alice;
  1. Sprawdź, jakie prawa ma alice, logując się na jej konto.

Teraz już wiesz, jak tworzyć role, zarządzać ich uprawnieniami i ułatwiać administrowanie przez role grupowe. W następnym wykładzie omówimy, jak ustawiać dostęp za pomocą komend GRANT i REVOKE dla dokładniejszego zarządzania na poziomie baz danych, schematów i tabel.

2
Zadanie
SQL SELF, poziom 47, lekcja 1
Niedostępne
Tworzenie roli grupowej i przypisywanie użytkowników
Tworzenie roli grupowej i przypisywanie użytkowników
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION