ALTER DEFAULT PRIVILEGES
Задает привилегии по умолчанию.
Синтаксис
ALTER DEFAULT PRIVILEGES
[ FOR { ROLE | USER } <target_role> [, ...] ]
[ IN SCHEMA <schema_name> [, ...] ]
<abbreviated_grant_or_revoke>
где abbreviated_grant_or_revoke может быть следующим:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON TABLES
TO { [ GROUP ] <role_name> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON SEQUENCES
TO { [ GROUP ] <role_name> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTIONS
TO { [ GROUP ] <role_name> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON TYPES
TO { [ GROUP ] <role_name> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON TABLES
FROM { [ GROUP ] <role_name> | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON SEQUENCES
FROM { [ GROUP ] <role_name> | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTIONS
FROM { [ GROUP ] <role_name> | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON TYPES
FROM { [ GROUP ] <role_name> | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
Описание
ALTER DEFAULT PRIVILEGES позволяет задать привилегии, которые будут применяться к объектам, создаваемым в будущем.
Команда не влияет на привилегии, назначенные уже существующим объектам.
В настоящее время можно изменить только привилегии для таблиц (включая представления и сторонние таблицы), последовательностей, функций и типов (включая домены).
Вы можете изменить привилегии по умолчанию только для объектов, которые будут созданы вами или ролями, членом которых вы являетесь. Привилегии могут быть установлены глобально (т.е. для всех объектов, создаваемых в текущей базе данных) или только для объектов, создаваемых в указанных схемах.
Как упоминается в описании команды GRANT, привилегии по умолчанию для любого типа объекта обычно предоставляют все возможные права владельцу объекта, а также могут предоставлять некоторые привилегии роли PUBLIC. Однако это поведение можно изменить, установив глобальные привилегии по умолчанию с помощью команды ALTER DEFAULT PRIVILEGES.
Привилегии по умолчанию, заданные для конкретной схемы, добавляются к глобальным привилегиям по умолчанию для данного типа объекта. Это означает, что вы не можете отозвать привилегии на уровне схемы, если они предоставлены глобально (либо по умолчанию, либо в соответствии с предыдущей командой ALTER DEFAULT PRIVILEGES, в которой схема не была указана). REVOKE на уровне схемы полезен только для отмены действия предыдущей команды GRANT на уровне схемы.
Параметры
| Параметр | Описание |
|---|---|
target_role |
Имя существующей роли, членом которой является текущая роль.
Если |
schema_name |
Имя существующей схемы.
Если указано, привилегии по умолчанию изменяются для объектов, создаваемых в этой схеме в будущем.
Если |
role_name |
Имя существующей роли для предоставления или отзыва привилегий.
Этот параметр и все остальные параметры в |
Примечания
Используйте команду \ddp утилиты psql для получения информации о существующих назначениях привилегий по умолчанию.
Значение привилегий такое же, как приведено в описании команды GRANT.
Если вы хотите удалить роль, для которой были изменены привилегии по умолчанию, необходимо отменить изменения в ее привилегиях по умолчанию или использовать команду 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;
Это связано с тем, что привилегии по умолчанию на уровне схемы могут только добавлять привилегии к глобальным настройкам, но не удалять привилегии, предоставленные ими.
Совместимость
В стандарте SQL нет команды ALTER DEFAULT PRIVILEGES.