Предоставление привилегий
Ограничение прав командой REVOKE
По умолчанию обычный пользователь не имеет прав доступа к объектам данным, которые ему не принадлежат. Чтобы отозвать право после его предоставления, владелец объекта (или суперпользователь) может воспользоваться командой REVOKE, имеющей много общего с командой GRANT. Синтаксис команды REVOKE:
REVOKE привилегия [….] ON объект […. ] FROM { PUBLIC | пользователь \ GROUP группа }
По своей структуре команда REVOKE идентична команде GRANT. Отличается только название самой команды и ключевое слово FROM заменяется словом ТО.
Примечание
Отзыв привилегий с ключевым словом PUBLIC действует только на специальную группу public, в которую входят все пользователи. При этом отзыв прав не влияет на пользователей, которым эти привилегии были предоставлены явно (то есть с указанием конкретных имен).
Предположим, пользователю david было предоставлено право доступа UPDATE к таблице books. В другом отделе пользователю уже не придется редактировать сведения о книгах, и теперь вы хотите отнять у него привилегию UPDATE на доступ к таблице books.
В листинге 10.19 команда \z клиента psql выводит информацию о правах для таблицы books; из результатов видно, что пользователь david имеет право записи в эту таблицу. Команда REVOKE отнимает у пользователя david привилегии UPDATE и DELETE для таблицы books. Фрагмент завершается еще одной командой \z, которая показывает, что привилегия была отозвана успешно.
Листинг 10.19. Отзыв прав.
booktown=# \z books Access permissions for database "booktown" Relation | Access permissions books | {"="."manager=arwR"."david=w"} (1 row) booktown=# REVOKE UPDATE, DELETE ON books booktown-# FROM david; CHANGE booktown=# \z books Access permissions for database "booktown" Relation Access permissions books | {"="."manager=arwR"} (1 row)