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

Предоставление привилегий

Предоставление привилегий командой GRANT

Для предоставления привилегий пользователям и группам используется команда SQL GRANT. Синтаксис команды GRANT:

GRANT привилегия [,…] ON объект [,…]
ТО { PUBLIC | пользователь \ GROUP группа }

Параметр привилегия заменяется любой из привилегий, перечисленных в табл. 10.2, а параметр объект определяет имя объекта базы данных (таблицы, представления или последовательности), для которого предоставляется привилегия. Секция, следующая после ключевого слова ТО, указывает, кому предоставляется привилегия. Допускается перечисление нескольких привилегии и объектов через запятую.

В одной команде GRANT может использоваться только один из вариантов, перечисленных за ключевым словом ТО. С ключевым словом PUBLIC привилегия предоставляется всем пользователям. Если указано имя пользователя или группы, привилегия предоставляется конкретному пользователю или группе.

Предположим, пользователю manager понадобились все права доступа к таблицам customers, books, editions и publishers. В листинге 10.17 все эти права предоставляются пользователю manager в одной команде GRANT.

Листинг 10.17. Предоставление привилегий пользователям.

booktown=# GRANT ALL ON customers, books, editions, publishers
booktown-# TO manager;
CHANGE

Ключевое слово ALL предоставляет пользователю manager все возможные права доступа (SELECT, UPDATE и т. д.) к перечисленным объектам. Сообщение CHANGE означает, что модификация привилегий прошла успешно. Помните, что для проверки прав доступа к объекту базы данных в psql может использоваться команда \z:

booktown=# \z publishers
Access permissions for database "booktown"
Relation Access permissions
publishers | {"="."manager=arwR"}
(1 row)

Рассмотрим другой пример – использование ключевого слова GROUP для предоставления привилегий членам группы. Допустим, всему отделу сбыта нужно предоставить право просмотра таблицы customers, но без возможности ее модификации. В листинге 10.18 всем членам группы sales предоставляется право доступа SELECT к таблице customers.

Листинг 10.18. Предоставление групповых привилегий.

booktown=# GRANT SELECT ON customers TO GROUP sales:
CHANGE
booktown=# \z customers
Access permissions for database "booktown"
Relation | Access permissions
customers | {"="."manager=arwR"."group sales=r"}
(1 row)
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.