Привилегии

5.6. Привилегии

Когда создаётся любой объект, ему назначается владелец. Обычно владелец — это та роль, которая запустила оператор создания данного объекта. Для большинства видов объектов, начальное состояние таково, что делать что-либо с объектом может только владелец (или суперпользователь). Чтобы разрешить другим ролям использовать его, им должны быть предоставлены превилегии.

Существует различные виды привилегий: SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE и USAGE. Эти привилегии применяются к отдельному объекту, в зависимости от типа объёкта (таблица, функция и т.д.) Полную информацию о разных типах привилегий, поддерживаемых PostgreSQL можно найти в GRANT. Следующие секции и главы также будут показывать вам как используются эти привилегии.

Право измененять или удалять объект, всегда является привилегией только владельца.

Объекту может быть назначен новый владелец с помощью команды ALTER для соответствующего вида объекта, например, ALTER TABLE. Суперпользователи могут делать это всегда; обычные роли могут делать это только если они одновременно и являются текущим владельцем данного объекта (или членом роли текущего владельца) и членом роли нового владельца.

Для назначения привилегий, используется команда GRANT. Например, если существует пользователь joe и таблица accounts, то привилегия на обновление этой таблицы данному пользователю предоставляется так:

GRANT UPDATE ON accounts TO joe;

Если в качестве привелегии указывается ALL, то для заданного типа объекта предоставляются все привелегии.

Специальное имя "пользователя" PUBLIC может быть использовано, чтобы предоставить привелегию каждому пользователю СУБД. Чтобы упростить управление привелегиями для большого количества пользователей в СУБД, можно создать "групповые" роли; подробности смотрите в Chapter 20.

Чтобы отобрать привилегию, используйте команду REVOKE:

REVOKE ALL ON accounts FROM PUBLIC;

У владельца объекта всегда неявно существуют специальные привилегии (например, права на выполнение DROP, GRANT, REVOKE и т.д.) и они не могут быть предоставлены или отобраны. Но владелец объекта может отобрать у себя свои собственные обычные привилегии, например сделать таблицу доступной для себя самого только на чтение и т.д.

Обычно, только владелец объекта (или суперпользователь) может предоставить или отобрать привилегии на этот объект. Однако, возможно предоставить пользователю привилегию с указанием опции WITH GRANT OPTION, которая даст ему права на предоставление этой привилегии другим пользователям. Если данная опция впоследствие отменяется, то все кто получил привилегию от пользователя с этой опцией (напрямую или через цепочку) потеряют эту привилегию. Подробности см. в GRANT и REVOKE.

Back to top

(С) Виктор Вислобоков, 2008-2023