Роли и атрибуты

Роли в PostgreSQL — это механизм управления правами доступа, объединяющий пользователей и группы.
Атрибуты ролей определяют их привилегии (например, возможность входа, создания БД, суперпользовательские права).

Понятие ролей

  • В PostgreSQL нет разделения на "пользователей" и "группы" — только роли.

  • Роль может быть:

    • Пользователем (с атрибутом LOGIN).

    • Группой (объединяет другие роли для упрощения управления правами).


Основные атрибуты ролей

Атрибуты задаются при создании/изменении роли (CREATE ROLE, ALTER ROLE):

Атрибут Описание Пример SQL
LOGIN Позволяет войти в СУБД (аналог "пользователя"). CREATE ROLE dev LOGIN;
SUPERUSER Даёт полный контроль над PostgreSQL (опасно!). CREATE ROLE admin SUPERUSER;
CREATEDB Позволяет создавать базы данных. CREATE ROLE dba CREATEDB;
CREATEROLE Позволяет создавать и управлять другими ролями. ALTER ROLE manager CREATEROLE;
REPLICATION Даёт права на репликацию (для standby-серверов). CREATE ROLE replicator REPLICATION;
PASSWORD 'пароль' Устанавливает пароль для входа. CREATE ROLE user1 LOGIN PASSWORD '123';
VALID UNTIL 'дата' Ограничивает срок действия роли. ALTER ROLE temp_user VALID UNTIL '2024-12-31';

Наследование ролей

Роли могут включать другие роли (INHERIT), получая их права.

Пример:
CREATE ROLE read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; CREATE ROLE analyst INHERIT read_only; -- analyst получит SELECT

Управление ролями

Создание роли:
CREATE ROLE role_name [WITH] [ATTRIBUTE...];
Изменение роли:
ALTER ROLE role_name SET attribute TO value;
Удаление роли:
DROP ROLE role_name;
Просмотр ролей:
SELECT * FROM pg_roles; -- Список всех ролей \du -- Команда в psql

Практическая часть

Создайте роль developer с правом входа и паролем.

CREATE ROLE developer LOGIN PASSWORD 'secure123';

Создайте роль dba с правами CREATEDB и CREATEROLE.

CREATE ROLE dba CREATEDB CREATEROLE;

Создайте роль report_user с доступом только на чтение (SELECT).

CREATE ROLE report_user; GRANT SELECT ON ALL TABLES IN SCHEMA public TO report_user;

Создайте роль manager, которая наследует report_user и может изменять данные (UPDATE).

CREATE ROLE manager INHERIT report_user; GRANT UPDATE ON ALL TABLES IN SCHEMA public TO manager;

Подключитесь под ролью developer и попробуйте создать базу данных. Должна быть ошибка.

CREATE DATABASE test_db; -- Ошибка: нет прав CREATEDB

  • Роли — гибкий инструмент для управления доступом в PostgreSQL.

  • Атрибуты (LOGIN, SUPERUSER, CREATEDB и др.) определяют возможности роли.

  • Наследование упрощает управление правами для групп пользователей.

Рекомендации:

  • Не злоупотребляйте SUPERUSER — используйте минимально необходимые права.

  • Регулярно аудитируйте роли (SELECT * FROM pg_roles).


Комментарии

Добавить комментарий

Чтобы оставить комменатрий необходимо Авторизоваться