Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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

Имя существующей роли, членом которой является текущая роль. Если FOR ROLE опущено, подразумевается текущая роль

schema_name

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

role_name

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

Примечания

Используйте команду \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.

См. также