Управление доступом
Роли и атрибуты
13
Авторские права
© Postgres Professional, 2015‒2022
Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Роли
Атрибуты
Участие в групповых ролях
Владельцы объектов
3
Роли
Роль — пользователь СУБД
Роль не связана с пользователем ОС
хотя многие программы используют имя пользователя ОС
как имя роли по умолчанию
Роль определяется на уровне кластера
В первом приближении роль — это пользователь СУБД. (Роль также
может выступать в качестве группы пользователей, о чем говорится
дальше в этой теме.)
Роли никак не связаны с именами пользователей ОС, хотя стандартные
программы это предполагают, выбирая значения по умолчанию.
Например, если при запуске psql не указать имя роли, на его место
будет подставлено имя пользователя ОС.
Роли являются общими объектами кластера. Например, одна роль
может подключаться к разным базам данных и быть владельцем
объектов в разных БД.
4
Атрибуты
Атрибуты определяют свойства роли
CREATE ROLE роль [WITH] атрибут [атрибут ...]
LOGIN возможность подключения
SUPERUSER суперпользователь
CREATEDB возможность создавать базы данных
CREATEROLE возможность создавать роли
REPLICATION использование протокола репликации
и другие
Роль обладает некоторыми атрибутами, определяющими ее общие
особенности и права (не связанные с правами доступа к объектам).
Обычно атрибуты имеют два варианта, например, CREATEDB (дает
право на создание БД) и NOCREATEDB (не дает такого права). Как
правило, по умолчанию выбирается ограничивающий вариант.
В таблице перечислены лишь некоторые из атрибутов. Атрибуты
INHERIT и BYPASSRLS рассматривается дальше в этом модуле.
6
Групповые роли
Включение роли в группу
student=> GRANT dba TO alice;
Исключение роли из группы
student=> REVOKE dba FROM alice;
Право управления участием в групповой роли
любая роль может включить другую роль в саму себя
роль с атрибутом SUPERUSER — любую роль в любую другую
роль с атрибутом CREATEROLE — любую роль в любую, кроме
суперпользовательской
student alice
dba
dba
alice
Роль может быть включена в другую роль подобно тому, как
пользователь Unix может быть включен в группу.
PostgreSQL не делает различий между ролями-пользователями и
ролями-группами. Поэтому любая роль может быть включена в любую
другую. При этом возможно появление цепочек включений (но циклы не
допускаются).
Смысл такого включения состоит в том, что для роли становятся
доступны атрибуты (и привилегии, о которых пойдет речь дальше),
которыми обладает групповая роль. Включение выполняется командой
GRANT: возможности групповой роли предоставляются другой роли.
Важно, от имени какой роли выполняется команда GRANT. Правом на
включение и исключение других ролей в данную роль обладают:
- сама эта роль;
- роли с атрибутом SUPERUSER;
- роли с атрибутом CREATEROLE (если данная роль — не является
суперпользовательской).
Чтобы воспользоваться правами, которые дают атрибуты групповой
роли, необходимо переключиться в нее командой SET ROLE.
8
Владельцы
Владелец объекта
роль, создавшая объект
(а также роли, включенные в нее)
может быть изменен командой ALTER ... OWNER TO роль
Когда роль создает в базе данных какие-либо объекты, она становится
их владельцем. На самом деле владельцами считаются также и роли,
включенные в создавшую объект роль.
При необходимости владельца объекта можно сменить. Для этого
используется команда ALTER для соответствующего объекта
с предложением OWNER TO.
Понятие владельца будет особенно важно для следующей темы этого
модуля — привилегий.
10
Итоги
Роли объединяют концепции пользователей и групп
Атрибуты определяют свойства ролей
Роли можно включать друг в друга
У каждого объекта базы данных есть роль-владелец
11
Практика
1. Создайте роль creator без права входа в систему,
но с правом создания баз данных и ролей.
Создайте пользователя weak с правом входа в систему.
2. Убедитесь, что weak не может создать базу данных.
3. Включите пользователя weak в группу creator.
Создайте новую базу данных под пользователем weak.
12
Практика+
1. Создайте роли alice и bob с правом входа в систему.
Создайте таблицу под ролью alice.
2. Сделайте необходимые настройки так, чтобы обе роли могли
изменять структуру таблицы (например, добавлять столбцы
командой ALTER TABLE).
3. Изменять структуру могут только владельцы таблицы. Нужно сделать
так, чтобы владельцем таблицы была не только Алиса, но и Боб.