ALTER DEFAULT PRIVILEGES
ALTER DEFAULT PRIVILEGES — определить права доступа по умолчанию
Синтаксис
ALTER DEFAULT PRIVILEGES [ FOR { ROLE | USER }целевая_роль
[, ...] ] [ IN SCHEMAимя_схемы
[, ...] ]предложение_GRANT_или_REVOKE
Гдепредложение_GRANT_или_REVOKE
может быть следующим: GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN } [, ...] | ALL [ PRIVILEGES ] } ON TABLES TO { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES TO { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTIONS | ROUTINES } TO { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES TO { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { { USAGE | CREATE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMAS TO { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ WITH GRANT OPTION ] REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN } [, ...] | ALL [ PRIVILEGES ] } ON TABLES FROM { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES FROM { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTIONS | ROUTINES } FROM { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPES FROM { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { USAGE | CREATE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMAS FROM { [ GROUP ]имя_роли
| PUBLIC } [, ...] [ CASCADE | RESTRICT ]
Описание #
Команда ALTER DEFAULT PRIVILEGES
позволяет задавать права, которые будут применяться к объектам, созданным в будущем. (Она не влияет на права, назначенные уже существующим объектам.) Права могут быть заданы глобально (т. е. для всех объектов, создаваемых в текущей базе данных) или только для объектов, создаваемых в указанных схемах.
Хотя пользователь может изменять свои права по умолчанию и права по умолчанию для ролей, членом которых он является, на права объекта при создании влияют только права по умолчанию текущей роли, и они не наследуются от любых ролей, в которые включена текущая роль.
Как объясняется в Разделе 5.8, права по умолчанию для объектов любого типа обычно дают все назначаемые разрешения владельцу объекта, а также могут давать некоторые разрешения роли PUBLIC
. Однако это поведение можно поменять, изменив права по умолчанию командой ALTER DEFAULT PRIVILEGES
.
В настоящее время можно изменять права только для схем, таблиц (включая представления и сторонние таблицы), последовательностей, функций и типов (включая домены). Применительно к данной команде функциями считаются также агрегатные функции и процедуры. Слова FUNCTIONS
и ROUTINES
для неё считаются равнозначными. (ROUTINES
предпочтительнее в перспективе как стандартный термин, охватывающий и функции, и процедуры. В более ранних выпусках Postgres Pro допускалось только слово FUNCTIONS
. Задать права по умолчанию для функций и процедур по отдельности нельзя.)
Заданные на уровне схемы права по умолчанию добавляются к тем, что определены глобально для конкретного типа объекта. Это означает, что вы не можете отозвать права уровня схемы, если они назначены глобально (либо по умолчанию, либо предыдущей командой ALTER DEFAULT PRIVILEGES
без указания схемы). Команда REVOKE
для схемы может быть полезна только для отмены действия предыдущей команды GRANT
для этой же схемы.
Параметры
целевая_роль
Изменяются права по умолчанию для объектов, созданных
целевой_ролью
или текущей, если целевая роль не указана.имя_схемы
Имя существующей схемы. Если указано, права по умолчанию меняются для объектов, которые будут созданы в этой схеме. Если
IN SCHEMA
опущено, меняются глобальные права по умолчанию. УказаниеIN SCHEMA
не допускается при установлении прав для схем, так как схемы не могут быть вложенными.имя_роли
Имя существующей роли, для которой даются или отзываются права. Этот и все другие параметры в
предложении_grant_или_revoke
действуют как описано в GRANT или REVOKE, за исключением того, что они распространяются не на один конкретный объект, а на целый класс объектов.
Примечания #
Чтобы узнать текущие назначенные права по умолчанию, воспользуйтесь командой \ddp
в psql. Как интерпретировать выводимую ей информацию, рассказывается в описании команды \dp
в Разделе 5.8.
Если вы желаете удалить роль, права по умолчанию для которой были изменены, необходимо явно отменить изменения прав по умолчанию или воспользоваться командой DROP OWNED BY
для избавления от назначенных для этой роли прав по умолчанию.
Примеры #
Наделение всех правом SELECT для всех таблиц (и представлений), которые будут созданы в дальнейшем в схеме myschema
, и наделение роли webuser
правом INSERT для этих же таблиц:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;
Отмена предыдущих изменений с тем, чтобы для таблиц, создаваемых в будущем, были определены только обычные права, без дополнительных:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE SELECT ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE INSERT ON TABLES FROM webuser;
Лишение роли public права на выполнение (EXECUTE), которое обычно даётся для функций (для всех функций, которые будут созданы ролью admin
):
ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
Однако заметьте, что этого же эффекта нельзя добиться с помощью команды, ограниченной одной схемой. Эта команда будет действовать, только если ей предшествовала соответствующая команда GRANT
:
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
Это объясняется тем, что на уровне схемы можно только назначить права по умолчанию, которые добавятся к назначенным глобально, но нельзя отозвать последние.
Совместимость
Оператор ALTER DEFAULT PRIVILEGES
отсутствует в стандарте SQL.