ALTER DEFAULT PRIVILEGES

Изменяет права доступа по умолчанию.

Синтаксис


ALTER DEFAULT PRIVILEGES
    [ FOR { ROLE | USER } <target_role> [, ...] ]
    [ IN SCHEMA <schema_name> [, ...] ]
    <abbreviated_grant_or_revoke>

where <abbreviated_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 позволяет задать привилегии, которые будут применяться к объектам, создаваемым в будущем. (Команда не влияет на привилегии уже существующих объектов.) В настоящее время можно изменять привилегии только для схем, таблиц (включая представления и внешние таблицы), последовательностей, функций и типов (включая домены). В контексте этой команды под функциями понимаются агрегатные функции и процедуры. Слова FUNCTIONS и ROUTINES являются эквивалентными в данной команде. (В дальнейшем рекомендуется использовать термин ROUTINES как стандартный для обозначения функций и процедур вместе взятых. В более ранних версиях Database разрешалось использовать только слово FUNCTIONS. Отдельно установить права по умолчанию для функций и процедур невозможно.)

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

Как описано в разделе [GRANT](), права по умолчанию для любого типа объекта обычно предоставляют все передаваемые разрешения владельцу объекта и могут дополнительно предоставлять некоторые привилегии PUBLIC. Однако такое поведение можно изменить, изменив глобальные права по умолчанию с помощью команды ALTER DEFAULT PRIVILEGES.

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

Параметры

  • target_role
    • Имя существующей роли, членом которой является текущая роль. Если FOR ROLE опущено, подразумевается текущая роль.
  • schema_name
    • Имя существующей схемы. Если указано, то права по умолчанию изменяются для объектов, создаваемых далее в этой схеме. Если IN SCHEMA опущено, изменяются глобальные права по умолчанию. Указание IN SCHEMA недопустимо при установке прав для схем, поскольку схемы не могут быть вложенными.
  • role_name
    • Имя существующей роли, для которой предоставляются или отзываются привилегии. Этот параметр и все остальные параметры в abbreviated_grant_or_revoke работают так, как описано в разделах [GRANT]() или [REVOKE](), за исключением того, что здесь устанавливаются разрешения для целого класса объектов, а не для конкретных именованных объектов.

Замечания

Для получения информации о текущих назначениях прав по умолчанию используйте команду \ddp в psql. Значения привилегий аналогичны тем, что объяснены для \dp в разделе 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;

Удалить разрешение EXECUTE для PUBLIC, которое обычно предоставляется на функции, для всех функций, которые в дальнейшем будет создавать роль 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