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 }
    [, ...] | 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 }
    [, ...] | 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 позволяет устанавливать права, которые будут применяться к объектам, создаваемым в будущем. (Она не влияет на права, назначенные уже существующим объектам.) Права можно установить глобально (т. е. для всех объектов, создаваемых в текущей базе данных) или только для объектов, создаваемых в указанных схемах.

Хотя вы можете изменить собственные права по умолчанию и права по умолчанию для ролей, членом которых вы являетесь, во время создания объекта на его права влияют только права по умолчанию текущей роли, и они не наследуются от любых ролей, членом которых является текущая роль.

Как объясняется в разделе Права, права по умолчанию для любого типа объекта обычно предоставляют все назначаемые разрешения владельцу объекта и могут также предоставлять некоторые права роли PUBLIC. Однако это поведение можно изменить путем смены глобальных прав по умолчанию командой ALTER DEFAULT PRIVILEGES.

В настоящее время права можно изменять только для схем, таблиц (включая представления и сторонние таблицы), последовательностей, функций и типов (включая домены). Применительно к данной команде функциями считаются также агрегаты и процедуры. Слова FUNCTIONS и ROUTINES в этой команде равнозначны. (ROUTINES предпочтительнее в перспективе как стандартный термин, охватывающий и функции, и процедуры. В ранних выпусках QHB допускалось только слово FUNCTIONS. Задать права по умолчанию для функций и процедур по отдельности нельзя.)

Права по умолчанию на уровне схемы добавляются к любым глобальным правам по умолчанию, применимым к определенному типу объекта. Иными словами, нельзя отозвать права на уровне схемы, если они назначены глобально (либо по умолчанию, либо в соответствии с предыдущей командой ALTER DEFAULT PRIVILEGES, где схема не указана). На уровне схемы команда REVOKE может быть полезна только для того, чтобы отменять действия предыдущей команды GRANT для этой же схемы.


Параметры

целевая_роль

Изменить права по умолчанию для объектов, созданных целевой_ролью, или текущей ролью, если целевая не указана.

имя_схемы

Имя существующей схемы. Если этот параметр указан, то права доступа по умолчанию изменяются для объектов, которые будут создаваться в этой схеме позднее. Если IN SCHEMA опущено, меняются глобальные права по умолчанию. Нельзя указывать IN SCHEMA при установлении прав для схем, так как схемы не могут быть вложенными.

имя_роли

Имя существующей роли, для которой необходимо предоставить или отозвать права. Этот параметр, а также все остальные параметры в предложении_grant_или_revoke действуют так, как описано на страницах команды GRANT или REVOKE, за исключением того, что они устанавливают разрешения не для каких-то конкретных объектов, а для целого класса объектов.


Примечания

Для получения информации о текущих назначениях прав по умолчанию, воспользуйтесь командой \ddp терминала psql. Интерпретация отображения данных о правах такая же, как приведенная в описании команды \dp в разделе Права.

Если вы хотите удалить роль, права по умолчанию для которой были изменены, необходимо отменить изменения прав по умолчанию или воспользоваться командой 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.


См. также

GRANT, REVOKE