Предоставление привилегий
Предоставление привилегий командой 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)