Иллюстрированный самоучитель по PostgreSQL

Управление группами

Группы упрощают процедуру назначения прав пользователям. Обычные привилегии должны назначаться каждому пользователю по отдельности. Это может быть весьма утомительно, если нескольким пользователям требуется одинаковый уровень доступа к нескольким объектам базы данных.

Для решения этой проблемы в PostgreSQL создаются группы. При создании группы достаточно указать ее имя, причем группа может быть пустой (то есть не содержащей ни одного пользователя). Пользователи, обладающие общими привилегиями доступа, включаются в группу и в дальнейшем считаются ее членами. Права доступа к объектам базы данных предоставляются группе в целом, а не ее отдельным членам. В системах с большим количеством пользователей и баз данных группы значительно упрощают задачу управления правами.

Примечание
Пользователь может входить в любое количество групп, но может и не принадлежать ни к одной группе
.

Создание и удаление групп

Прежде чем переходить к управлению группами, сначала необходимо разобраться в том, как происходит создание и удаление групп. Обе операции требуют привилегий суперпользователя (за дополнительной информацией о суперпользователях обращайтесь к разделу "Управление пользователями" этой главы).

Создание группы

Любой суперпользователь может создать новую группу PostgreSQL командой SQL CREATE GROUP. Синтаксис команды CREATE GROUP:

CREATE GROUP группа [ WITH
[ SYSID идентификатор_группы ]
[ USER пользователь [….]]]

Параметр группа определяет имя создаваемой группы. Имена групп должны начинаться с алфавитного символа, а их длина не может превышать 31 символа. В секции WITH передаются дополнительные атрибуты. Ключевое слово SYSID задает системный идентификатор новой группы. Ключевое слово USER позволяет включить одного или нескольких пользователей в группу на стадии ее создания. Имена членов группы разделяются запятыми.

Следует помнить, что таблицы пользователей и групп в PostgreSQL существуют отдельно друг от друга. Несмотря на это, в PostgreSQL не допускается совпадение системных идентификаторов пользователей и групп.

В листинге 10.11 создается группа sales, в которую при создании включаются два пользователя, allen и vincent.

Листинг 10.11. Создание группы.

booktown=# CREATE GROUP sales
booktown-# WITH USER alien, Vincent;
CREATE GROUP

Сообщение CREATE GROUP означает, что группа успешно создана. Чтобы убедиться в этом, а также получить список всех существующих групп, достаточно выполнить запрос к системной таблице pg_group. Пример такого запроса приведен в листинге 10.12.

Листинг 10.12. Получение списка групп.

booktown=# SELECT * FROM pg_group;
groname grosysid | grolist
sales | 1 | {7017.7016}
accounting | 2 |
marketing | 3
(3 rows)

Обратите внимание на столбец grolist – в нем перечислены идентификаторы пользователей PostgreSQL, входящих в группу. Это те самые идентификаторы, которые выводятся в представлении pg_user. Пример:

booktown=# SELECT usename FROM pg_user
booktown-# WHERE usesysid = 7017 OR usesysid = 7016;
usename
alien
vincent
(2 rows)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.