ALTER DEFAULT PRIVILEGES#
ALTER DEFAULT PRIVILEGES
ALTER DEFAULT PRIVILEGES — определение привилегий доступа по умолчанию
Синтаксис
ALTER DEFAULT PRIVILEGES [ FOR { ROLE | USER }target_role
[, ...] ] [ IN SCHEMAschema_name
[, ...] ]abbreviated_grant_or_revoke
whereabbreviated_grant_or_revoke
is one of: 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 | ROUTINES } TO { [ GROUP ]role_name
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES TO { [ GROUP ]role_name
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { { USAGE | CREATE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMAS 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 | ROUTINES } FROM { [ GROUP ]role_name
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPES FROM { [ GROUP ]role_name
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { USAGE | CREATE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMAS FROM { [ GROUP ]role_name
| PUBLIC } [, ...] [ CASCADE | RESTRICT ]
Описание
ALTER DEFAULT PRIVILEGES
позволяет установить
привилегии, которые будут применяться к объектам, создаваемым в будущем.
(Это не влияет на привилегии, назначенные уже существующим объектам.)
Привилегии могут быть установлены глобально (т.е. для всех объектов, создаваемых в
текущей базе данных) или только для объектов, создаваемых в указанных схемах.
Хотя вы можете изменить свои собственные привилегии по умолчанию и привилегии по умолчанию ролей, членом которых вы являетесь, в момент создания объекта новые разрешения на объект затрагиваются только привилегиями по умолчанию текущей роли и не наследуются от каких-либо ролей, членом которых является текущая роль.
Согласно Раздел 5.7, по умолчанию привилегии для любого типа объекта обычно предоставляют все разрешения, которые можно предоставить владельцу объекта, и могут также предоставлять некоторые привилегии для PUBLIC
. Однако это поведение можно изменить, изменив глобальные привилегии по умолчанию с помощью ALTER DEFAULT PRIVILEGES
.
В настоящее время можно изменять только привилегии для схем, таблиц (включая представления и внешние таблицы), последовательностей, функций и типов (включая домены). Для этой команды функции включают агрегаты и процедуры. Слова FUNCTIONS
и ROUTINES
эквивалентны в этой команде. (ROUTINES
предпочтительнее использовать в будущем как стандартный термин для функций и процедур вместе. В более ранних версиях PostgreSQL было разрешено использовать только слово FUNCTIONS
. Невозможно установить привилегии по умолчанию для функций и процедур отдельно.)
Все привилегии по умолчанию, указанные для схемы, добавляются к глобальным привилегиям по умолчанию для конкретного типа объекта. Это означает, что вы не можете отозвать привилегии для схемы, если они предоставлены глобально (либо по умолчанию, либо в соответствии с предыдущей командой ALTER
DEFAULT PRIVILEGES
, которая не указывала схему). Отзыв привилегий REVOKE
для схемы имеет смысл только для отмены эффектов предыдущего предоставления привилегий GRANT
для схемы.
Параметры
target_role
Изменить привилегии по умолчанию для объектов, созданных
target_role
, или текущей роли, если не указано.schema_name
Имя существующей схемы. Если указано, то изменяются настройки по умолчанию для объектов, создаваемых позднее в этой схеме. Если
IN SCHEMA
не указано, то изменяются глобальные настройки по умолчанию.IN SCHEMA
не разрешается при установке привилегий для схем, так как схемы не могут быть вложенными.role_name
Имя существующей роли, для которой предоставляются или отзываются привилегии. Этот параметр, а также все остальные параметры в
abbreviated_grant_or_revoke
, действуют так, как описано в разделе GRANT или REVOKE, за исключением того, что устанавливаются разрешения для целого класса объектов, а не для конкретных именованных объектов.
Примечания
Используйте команду \ddp
из psql для получения информации о существующих назначениях привилегий по умолчанию. Значение отображаемых привилегий такое же, как и объяснено для команды \dp
в разделе Раздел 5.7.
Если нужно удалить роль, для которой были изменены привилегии по умолчанию, необходимо отменить изменения в ее привилегиях по умолчанию или использовать команду 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;
Удалите общее разрешение 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
.