Управление доступом
Членство в ролях
16
Авторские права
© Postgres Professional, 2017–2026
Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов, Алексей Береснев
Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
edu@postgrespro.ru
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Включение роли в роль
Способы получения прав на объект
Наследование
Переключение на роль
Управление включением ролей
3
Включение в роль Исключение из роли
student=# GRANT dba TO alice; student=# REVOKE dba FROM alice;
Псевдороль PUBLIC неявно включает остальные роли
Включение роли в роль
alice
dba
alice
dba
циклы
запрещены
Роль можно включить в другую роль. В таком случае вторая роль
выступает в качестве группы и говорят, что первая роль становится
членом второй. Роль может быть включена в несколько ролей;
включенная роль может, в свою очередь, включать в себя третьи роли
и т. д., но циклы при этом не допускаются.
Роль может быть одновременно «пользовательской» (иметь атрибут
LOGIN) и «групповой» (включать другие роли).
В кластере существует также псевдороль PUBLIC, которая неявно
включает в себя все остальные роли.
4
Получение прав на объект
Суперпользовательский доступ
суперпользователи не ограничены в действиях,
за исключением удаления начального суперпользователя
Владение
Обладание привилегией
Членство в группе
INHERIT наследование прав групповой роли
SET переключение на групповую роль
ADMIN управление членством в групповой роли
В целом у роли есть несколько вариантов получить право на действия
с определенным объектом.
Суперпользователи (роли с атрибутом SUPERUSER) — особый случай,
для них проверки прав доступа не выполняются. При этом нельзя
удалить начальную суперпользовательскую роль или лишить ее
атрибута SUPERUSER. Начальный суперпользователь (bootstrap
superuser) создается при создании кластера баз данных.
Становясь владельцем объекта, роль получает право выполнять с ним
практически любые действия.
Помимо этого, у роли может возникнуть право на действие с объектом,
если она получит привилегию на объект (автоматически при создании
объекта или явно).
И наконец, роль может получить дополнительные права при включении
в другую роль. При включении можно указать любую комбинацию
параметров членства:
●
INHERIT включает наследование прав групповой роли на действия
с объектами;
●
SET позволяет переключаться на групповую роль;
●
ADMIN дает право включать в группу другие роли, изменять атрибуты
членства в группе и исключать роли из группы.
Параметры INHERIT и SET появились в PostgreSQL 16.
5
Наследование
Атрибуты не наследуются
Права на объекты наследуются
если роль входит в группу с параметром членства INHERIT
alice
bob
grp1 grp2 grp3
INHERIT
INHERIT
INHERIT
наследуются
права нескольких
групп
косвенное
наследование
Если роль включена в другую роль, она может наследовать права на
объекты, которыми обладает группа благодаря привилегиям или
владению. Атрибуты ролей никогда не наследуются.
Роль может наследовать права на объекты от нескольких ролей, как при
непосредственном включении в несколько групп, так и по цепочке
включений. Наследуются не только права, которыми непосредственно
обладает группа, но и права, которые она сама унаследовала.
Наследование срабатывает, когда роль включена в группу
с параметром членства INHERIT. По умолчанию именно так и
происходит, поскольку команда GRANT берет значение параметра
INHERIT из одноименного атрибута включаемой роли, а при создании
роли этот атрибут по умолчанию устанавливается. Однако параметр
можно установить и явно, переопределив атрибут. Для этого надо
указать в команде GRANT предложение WITH INHERIT.
7
Параметр членства SET
Переключение на роль Возврат к исходной роли
alice=> SET ROLE dba; alice=> RESET ROLE;
Переключение на роль
alice
dba
SET
alice
dba
SET
current_user
session_user
Параметр членства SET позволяет выполнить команду SET ROLE
и (временно) переключиться на групповую роль со всеми ее атрибутами
и привилегиями на объекты. Все действия будут выполняться от имени
групповой роли и создаваемые объекты будут принадлежать групповой
роли. Права исходной роли при этом недоступны. Параметр появился
в PostgreSQL 16, до этого переключение на групповую роль
разрешалось всегда.
Имя пользователя, подключившегося к серверу, возвращает функция
session_user. А имя текущей роли можно узнать с помощью функции
current_user (или current_role, что одно и то же).
9
Параметр членства ADMIN
включение в группу
исключение из группы
изменение параметров членства
alice=> GRANT dba TO bob; alice=> REVOKE dba FROM bob;
Управление членством
alice
dba
bob
ADMIN
alice
dba
bob
ADMIN
Управлять включением ролей в группу (а также исключением ролей из
группы и изменением параметров членства ролей в группе) могут те
члены группы, которые имеют в ней параметр членства ADMIN.
Роль не может иметь параметр членства ADMIN сама в себе, поэтому
не может управлять включением в себя других ролей.
Суперпользователи могут управлять включением любых ролей
в любые.
11
Лишение членства в роли с параметром ADMIN
student=# REVOKE alice FROM bob CASCADE;
Каскадное исключение
bob
alice
charlie
ADMIN
предоставлено
Бобом
обязательно,
если членство
было предоставлено
другим ролям
Когда пользователь лишается членства в роли, которым он обладал
с параметром ADMIN, членства должны лишиться и другие роли,
которым оно было предоставлено этим пользователем. В этом случае
в команде REVOKE необходимо указать ключевое слово CASCADE,
иначе будет зафиксирована ошибка.
Такое лишение членства действует рекурсивно, точно так же, как при
отзыве права передачи привилегии GRANT OPTION, которое
рассматривалось в предыдущей теме.
13
Итоги
Роли можно включать друг в друга
Права на объекты приобретаются за счет привилегий,
владения и членства в группах
Параметры членства определяют порядок передачи прав
при включении
14
Практика
1. Создайте роль для Алисы, включив ее в суперпользователь-
скую роль с параметром SET. Все дальнейшие действия
выполняются в сеансе Алисы.
2. Создайте пользователя Боб — члена группы readers —
и пользователя Чарли — члена группы writers. Оба
включения выполнены с параметром INHERIT (без SET).
3. Создайте таблицу в отдельной схеме, выдайте роли readers
привилегию на ее чтение, а роли writers — на изменение.
4. Проверьте, могут ли Алиса, Боб и Чарли читать и менять
строки таблицы.
15
Практика+
Изучите способы получения метаинформации.
1. Создайте роли, схему и таблицу, как это сделано в Практике.
2. Получите: список объектов Алисы; права пользователей на
эти объекты; список ролей, имеющих право чтения таблицы;
информацию о включении ролей в группы.
3. Может ли пользователь Дейв, не имеющий доступа
к объектам, увидеть эту метаинформацию?
2, 3. Для получения метаинформации можно использовать следующие
источники:
●
системный каталог
●
системные информационные функции
●
метакоманды psql
еред%20отправкой.-,Метакоманды,-Всё%2C%20что%20вводится
●
информационную схему