JavaRush /Курси /SQL SELF /Створення та керування ролями: ROLES

Створення та керування ролями: ROLES

SQL SELF
Рівень 47 , Лекція 1
Відкрита

Роль у PostgreSQL може представляти або окремого користувача, або групу користувачів. Вона керує доступом до баз даних, таблиць, схем та інших об'єктів.

Коли створюється роль, вона за замовчуванням не прив'язана до конкретного користувача чи групи, але ти можеш призначати їй властивості та права, які відповідають твоїм задачам.

Відмінність ролей від користувачів

А що з користувачами? Тут важливо не переплутати. У PostgreSQL користувачі теж вважаються ролями, але з особливістю: користувачі завжди мають можливість входу в систему. Тобто кожна роль може бути користувачем, якщо в неї є атрибут LOGIN. Якщо роль потрібна просто для об'єднання користувачів у групу або не давати їй можливості входу, можна не додавати атрибут LOGIN.

Приклад:

  • Роль з атрибутом LOGIN = користувач.
  • Роль без LOGIN = група або "службова роль".

Створюємо роль

Для створення ролей використовується команда CREATE ROLE. Синтаксис виглядає так:

CREATE ROLE <ім'я_ролі> [WITH] [параметри];

Де параметри — це властивості ролі, такі як:

  • LOGIN — можливість входу в базу даних.
  • CREATEDB — можливість створювати бази даних.
  • CREATEROLE — можливість створювати інші ролі.
  • SUPERUSER — повний доступ (найнебезпечніші ролі, використовуй обережно).
  • PASSWORD — пароль для авторизації.

Давай розглянемо приклад створення ролі користувача. Припустимо, ти хочеш створити користувача student з правом входу в систему і паролем. Для цього виконай такий запит:

CREATE ROLE student WITH LOGIN PASSWORD 'securePassword123';

Ця команда створить роль з іменем student, яка зможе підключатися до бази даних.

Тепер створимо роль teachers, яка буде груповою. Групова роль не потребує атрибута LOGIN, бо користувачі, що входять у групу, будуть використовувати свої облікові записи.

CREATE ROLE teachers;

Призначення привілеїв ролям

Ролі в PostgreSQL створюються, щоб надавати або обмежувати доступ до ресурсів. Для цього використовуються команди GRANT і REVOKE.

Надання прав з GRANT

Синтаксис команди:

GRANT <привілеї> ON <об'єкт> TO <роль>;

Давай створимо таблицю courses і надамо ролі teachers права на читання та зміну даних у цій таблиці.

-- Створюємо таблицю
CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    teacher_id INT
);

-- Надаємо доступ
GRANT SELECT, INSERT, UPDATE ON courses TO teachers;

Тепер усі користувачі, що входять у роль teachers, зможуть переглядати, додавати й змінювати дані в таблиці.

Відкликання прав з REVOKE

Для відкликання прав використовується команда REVOKE. Синтаксис:

REVOKE <привілеї> ON <об'єкт> FROM <роль>;

Щоб заборонити групі teachers оновлювати дані в таблиці courses, виконай команду:

REVOKE UPDATE ON courses FROM teachers;

Ієрархія ролей: наслідування

Користувачі можуть "успадковувати" привілеї від ролі-групи для спрощення керування. Це як передача "спадщини" від одного користувача іншому.

Ключове слово INHERIT дозволяє ролі наслідувати привілеї від іншої ролі. Це поводження увімкнено за замовчуванням, але його можна змінити.

Приклад:

-- Додаємо користувача `john` у групу `teachers`
GRANT teachers TO john;

Тепер користувач john автоматично отримає всі привілеї, призначені груповій ролі teachers.

Перевіримо привілеї:

\du john

Якщо треба вимкнути наслідування, роль створюється з атрибутом NOINHERIT.

CREATE ROLE admin NOINHERIT;

Тепер користувачі в ролі admin не зможуть за замовчуванням користуватися її привілеями.

Створення груп ролей для керування доступом

Групи ролей спрощують керування доступом, особливо у великих проєктах. Замість того щоб додавати права кожному користувачу, можна додати користувачів у групи, а групам надати потрібні привілеї.

Наведемо простий приклад групової ролі. Для цього створимо групи:

  • students — група для студентів.
  • teachers — група для викладачів.
CREATE ROLE students;
CREATE ROLE teachers;

Призначимо користувачів групам:

-- Призначити користувача john у групу students
GRANT students TO john;

-- Призначити користувача jane у групу teachers
GRANT teachers TO jane;

Тепер, надавши доступ до таблиці групам students і teachers, ми автоматично дамо його всім їхнім учасникам!

Практичне завдання

  1. Створи таблицю exams з полями:
    • id: первинний ключ;
    • subject: текст;
    • teacher_id: ID викладача.
CREATE TABLE exams (
    id SERIAL PRIMARY KEY,
    subject TEXT NOT NULL,
    teacher_id INT
);
  1. Створи групи ролей students і teachers.
CREATE ROLE students;
CREATE ROLE teachers;
  1. Дай групі teachers права на додавання та зміну даних у таблиці exams.
GRANT INSERT, UPDATE ON exams TO teachers;
  1. Дай групі students права тільки на читання даних.
GRANT SELECT ON exams TO students;
  1. Створи користувача alice і додай її в групу students.
CREATE ROLE alice WITH LOGIN PASSWORD 'alicePassword';
GRANT students TO alice;
  1. Перевір, які права має alice, підключившись під її обліковим записом.

Тепер ти знайомий з тим, як створювати ролі, керувати їхніми привілеями та спрощувати адміністрування за допомогою групових ролей. У наступній лекції ми розглянемо, як налаштовувати доступ за допомогою команд GRANT і REVOKE для більш точного керування на рівні баз даних, схем і таблиць.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ