ALTER DEFAULT PRIVILEGES#

ALTER DEFAULT PRIVILEGES

ALTER DEFAULT PRIVILEGES

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

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

Согласно Раздел 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.

См. также

GRANT, REVOKE