Введение
Когда объект создается, ему назначается владелец. Обычно у владельца есть роль выполнять определенные инструкции. Для большинства типов объектов начальным состоянием является то, что только владелец (или суперпользователь) может что-либо делать с объектом. Чтобы разрешить другим ролям использовать его, необходимо предоставить права. Привилегия — это право выполнять определенный тип оператора SQL или получать доступ к объекту другого пользователя. Некоторые примеры привилегий включают право:
- Подключиться к базе данных
- Создать базу данных или таблицу
- Изменить таблицу
- Выбрать строки из таблицы другого пользователя
- Выполнить хранимую процедуру другого пользователя
PostgreSQL Версия: 9.4
Содержание
Типы привилегий
Предоставление
Отозвать
Типы привилегий
Существуют различные виды привилегий: SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE и USAGE. Привилегии, применимые к конкретному объекту, зависят от типа объекта (таблица, функция и т. Д.). Вот подробности:
Name | Описание |
---|---|
SELECT | Разрешает SELECT из любого столбца или определенных перечисленных столбцов указанной таблицы, представления или последовательности, использование COPY TO. |
INSERT | Разрешает ВСТАВИТЬ новую строку в указанную таблицу. Также позволяет КОПИРОВАТЬ ИЗ. |
ОБНОВЛЕНИЕ | Разрешает ОБНОВЛЕНИЕ любого столбца или определенных столбцов в списке. Для больших объектов эта привилегия позволяет записывать или усекать объект. |
DELETE | Позволяет УДАЛИТЬ строку из указанной таблицы . |
TRUNCATE | Разрешает TRUNCATE для указанной таблицы. |
ССЫЛКИ | Привилегия может быть предоставлена для всех столбцов таблицы или только для определенных столбцов. |
TRIGGER | Разрешает создание триггера для указанной таблицы. |
CREATE | Базы данных: позволяет создавать новые схемы в базе данных. Схемы: разрешать новые объекты быть созданным в схеме. Чтобы переименовать существующий объект, вы должны владеть объектом и иметь эту привилегию для содержащей его схемы. Табличные пространства: разрешает создание таблиц, индексов и временных файлов в табличном пространстве и позволяет создавать базы данных, которые имеют табличное пространство в качестве табличного пространства по умолчанию. |
CONNECT | Позволяет пользователю подключаться к указанной базе данных. Эта привилегия проверяется при запуске соединения (помимо проверки любых ограничений, налагаемых pg_hba.conf). |
TEMPORARY TEMP | Позволяет создавать временные таблицы при использовании указанной базы данных. |
EXECUTE | Разрешает использование указанной функции и использования любых операторов, которые реализованы поверх функции. Это единственный тип привилегий, применимый к функциям. |
ИСПОЛЬЗОВАНИЕ | Процедурные языки: разрешает использование указанных язык для создания функций на этом языке. Это единственный тип привилегий, применимый к процедурным языкам. Схемы:, Разрешает доступ к объектам, содержащимся в указанной схеме (при условии, что собственные требования к привилегиям объектов также выполняются). Последовательности: эта привилегия позволяет использовать функции currval и nextval. Типы и домены: эта привилегия позволяет использовать тип или домен при создании таблиц, функций и других объектов схемы . Серверы: эта привилегия позволяет получателю права создавать сторонние таблицы с помощью сервера, а также создавать, изменять или удалять сопоставления пользователей своего собственного пользователя, связанные с этим сервером. |
ВСЕ ПРИВИЛЕГИИ | Предоставить сразу все доступные привилегии. |
Предоставить
Оператор GRANT определяет права доступа. Этот оператор используется для предоставления привилегий объекту базы данных (таблица, столбец, представление, сторонняя таблица, последовательность, база данных, оболочка сторонних данных, внешний сервер, функция, процедурный язык, схема или табличное пространство) и объекту, который предоставляет членство в роль. Этот вариант команды GRANT предоставляет членство в роли одной или нескольким другим ролям. Членство в роли важно, потому что оно передает привилегии, предоставленные роли, каждому из ее участников. См. Следующий синопсис:
Grant ON | Синтаксис |
---|---|
имя_таблицы, имя_схемы |
GRANT {{SELECT | ВСТАВИТЬ | ОБНОВЛЕНИЕ | УДАЛИТЬ | TRUNCATE | СПИСОК ЛИТЕРАТУРЫ | TRIGGER} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} НА {[ТАБЛИЦА] имя_таблицы [, ...] | ВСЕ ТАБЛИЦЫ В СХЕМЕ имя_схемы [, ...]} ДЛЯ {[ГРУППА] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
имя_столбца, имя_таблицы |
GRANT {{SELECT | ВСТАВИТЬ | ОБНОВЛЕНИЕ | ССЫЛКИ} (имя_столбца [, ...]) [, ...] | ВСЕ [ПРИВИЛЕГИИ] (имя_столбца [, ...])} НА [ТАБЛИЦА] имя_таблицы [, ...] ДЛЯ {[ГРУППА] имя_роли | PUBLIC} [, ...] [WITH GRANT OPTION] |
имя_последовательности, имя_схемы |
GRANT {{ИСПОЛЬЗОВАНИЕ | ВЫБРАТЬ | ОБНОВЛЕНИЕ} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} НА {ПОСЛЕДОВАТЕЛЬНОСТЬ имя_последовательности [, ...] | ВСЕ ПОСЛЕДОВАТЕЛЬНОСТИ В СХЕМЕ имя_схемы [, ...]} К {[ГРУППЕ] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
имя_базы_данных |
ГРАНТ {{СОЗДАТЬ | ПОДКЛЮЧИТЬ | ВРЕМЕННЫЙ | TEMP} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ БАЗЫ ДАННЫХ имя_базы_данных [, ...] ДЛЯ {[ГРУППА] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
имя_домена |
ГРАНТ {ИСПОЛЬЗОВАНИЕ | ВСЕ [ПРИВИЛЕГИИ]} НА ДОМЕНЕ имя_домена [, ...] К {[ГРУППЕ] имя_роли | PUBLIC} [, ... ] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
fdw_name |
GRANT {USAGE | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ ОБЛОЖКИ ИНОСТРАННЫХ ДАННЫХ fdw_name [, ...] TO {[GROUP] role_name | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
имя_сервера |
ГРАНТ {ИСПОЛЬЗОВАНИЕ | ВСЕ [ПРИВИЛЕГИИ]} НА ИНОСТРАННОМ СЕРВЕРЕ имя_сервера [, ...] ДЛЯ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [WITH GRANT OPTION] |
имя_функции, имя_аргумента, тип_аргумента, имя_схемы |
GRANT {EXECUTE | ВСЕ [ПРИВИЛЕГИИ]} НА {ФУНКЦИЯ имя_функции ([[режим_аргумента] [имя_аргумента] тип_аргумента [, ...]]) [, ...] | ВСЕ ФУНКЦИИ В СХЕМЕ имя_схемы [, ...]} ДЛЯ {[ГРУППА] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
lang_name |
ГРАНТ {ИСПОЛЬЗОВАНИЕ | ВСЕ [ПРИВИЛЕГИИ]} НА ЯЗЫКЕ lang_name [, ...] ДЛЯ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
loid |
GRANT {{SELECT | ОБНОВЛЕНИЕ} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ БОЛЬШОГО ОБЪЕКТА loid [, ...] ДЛЯ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
имя_схемы |
ГРАНТ {{СОЗДАТЬ | ИСПОЛЬЗОВАНИЕ} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ СХЕМЫ имя_схемы [, ...] ДЛЯ {[ГРУППА] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
tablespace_name |
ГРАНТ {СОЗДАТЬ | ВСЕ [ПРИВИЛЕГИИ]} НА TABLESPACE имя_табличного_пространства [, ...] В {[ГРУППУ] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
имя_типа |
ГРАНТ {ИСПОЛЬЗОВАНИЕ | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ ТИПА имя_типа [, ...] ДЛЯ {[ГРУППА] имя_роли | PUBLIC} [, ...] [С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ] |
имя_роли |
GRANT имя_роли [, ...] TO имя_роли [, ...] [С ОПЦИЕЙ АДМИНИСТРАТОРА] |
Отозвать
Команда REVOKE используется для отзыва ранее предоставленных привилегий для одной или нескольких ролей. См. Следующий синопсис:
Revoke ON | Syntax |
---|---|
имя_таблицы, имя_схемы |
REVOKE [GRANT OPTION FOR] {{SELECT | ВСТАВИТЬ | ОБНОВЛЕНИЕ | УДАЛИТЬ | TRUNCATE | СПИСОК ЛИТЕРАТУРЫ | TRIGGER} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} НА {[ТАБЛИЦА] имя_таблицы [, ...] | ВСЕ ТАБЛИЦЫ В СХЕМЕ имя_схемы [, ...]} ИЗ {[ГРУППА] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_столбца, имя_столбца, имя_таблицы |
REVOKE [ ВАРИАНТ ГРАНТА ДЛЯ] {{ВЫБРАТЬ | ВСТАВИТЬ | ОБНОВЛЕНИЕ | ССЫЛКИ} (имя_столбца [, ...]) [, ...] | ВСЕ [ПРИВИЛЕГИИ] (имя_столбца [, ...])} НА [ТАБЛИЦА] имя_таблицы [, ...] ИЗ {[ГРУППА] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_последовательности, имя_схемы |
REVOKE [GRANT OPTION FOR] {{USAGE | ВЫБРАТЬ | ОБНОВЛЕНИЕ} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ {SEQUENCE sequence_name [, ... ] | ВСЕ ПОСЛЕДОВАТЕЛЬНОСТИ В СХЕМЕ имя_схемы [, ...]} ИЗ {[ГРУППА] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_базы_данных |
REVOKE [GRANT OPTION FOR] {{CREATE | ПОДКЛЮЧИТЬ | ВРЕМЕННЫЙ | TEMP} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ БАЗЫ ДАННЫХ имя_базы_данных [, ...] ИЗ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_домена |
REVOKE [GRANT OPTION FOR] {USAGE | ВСЕ [ПРИВИЛЕГИИ]} НА ДОМЕНЕ имя_домена [, ...] ИЗ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
fdw_name |
REVOKE [GRANT OPTION FOR] {USAGE | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ ОБЛОЖКИ ИНОСТРАННЫХ ДАННЫХ fdw_name [, ...] FROM {[GROUP] role_name | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_сервера |
ОТМЕНИТЬ [ОПЦИЯ ПРЕДОСТАВЛЕНИЯ] {ИСПОЛЬЗОВАНИЕ | ВСЕ [ПРИВИЛЕГИИ]} НА ИНОСТРАННОМ СЕРВЕРЕ имя_сервера [, ...] ИЗ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_функции, имя_аргумента, |
REVOKE [GRANT OPTION FOR] {EXECUTE | ВСЕ [ПРИВИЛЕГИИ]} НА {ФУНКЦИЯ имя_функции ([[режим_аргумента] [имя_аргумента] тип_аргумента |
lang_name |
REVOKE [GRANT OPTION FOR] {USAGE | ВСЕ [ПРИВИЛЕГИИ]} НА ЯЗЫКЕ lang_name [, ...] ИЗ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
loid |
REVOKE [GRANT OPTION FOR] {{SELECT | ОБНОВЛЕНИЕ} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ БОЛЬШОГО ОБЪЕКТА loid [, ...] ИЗ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_схемы |
REVOKE [GRANT OPTION FOR] {{CREATE | ИСПОЛЬЗОВАНИЕ} [, ...] | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ СХЕМЫ имя_схемы [, ...] ИЗ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_табличного_пространства |
REVOKE [GRANT OPTION FOR] {CREATE | ВСЕ [ПРИВИЛЕГИИ]} НА TABLESPACE имя_табличного_пространства [, ...] ИЗ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_типа |
ОТМЕНИТЬ [ОПЦИЯ ПРЕДОСТАВЛЕНИЯ] {ИСПОЛЬЗОВАНИЕ | ВСЕ [ПРИВИЛЕГИИ]} ДЛЯ ТИПА имя_типа [, ...] ИЗ {[ГРУППЫ] имя_роли | PUBLIC} [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
имя_роли |
ОТМЕНИТЬ [ОПЦИЯ АДМИНИСТРАТОРА ДЛЯ] имя_роли [, .. .] FROM имя_роли [, ...] [КАСКАД | ОГРАНИЧЕНИЕ] |
Примеры:
Отменить права на вставку для публичных фильмов в таблице:
ОТМЕНА ВСТАВКИ ДЛЯ ФИЛЬМОВ ОТ ОБЩЕСТВЕННОСТИ;
Отменить все привилегии (означает «отозвать все предоставленные мной привилегии». ) от пользователя document1 по видам:
ОТМЕНА ВСЕ ПРИВИЛЕГИИ ДЛЯ ВИДОВ ОТ document1;
Отменить членство в роли администраторов у пользователя kapil:
ОТЗЫВ админов ОТ kapil;