Управление группами
Группы упрощают процедуру назначения прав пользователям. Обычные привилегии должны назначаться каждому пользователю по отдельности. Это может быть весьма утомительно, если нескольким пользователям требуется одинаковый уровень доступа к нескольким объектам базы данных.
Для решения этой проблемы в 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)