Перейти к основному содержимому

ALTER DEFAULT PRIVILEGES

примечание

Эта страница переведена при помощи нейросети GigaChat.

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

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

Как объясняется в разделе «Привилегии», привилегии по умолчанию для любого типа объекта обычно предоставляют все предоставляемые разрешения владельцу объекта и могут предоставлять некоторые привилегии 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, за исключением того, что здесь устанавливаются разрешения для целого класса объектов, а не конкретных именованных объектов.

Примечания

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

Если нужно удалить роль, для которой были изменены привилегии по умолчанию, необходимо отменить изменения в ее привилегиях по умолчанию или использовать DROP OWNED BY, чтобы избавиться от записи привилегий по умолчанию для этой роли.

Примеры

Предоставьте привилегию SELECT всем пользователям для всех таблиц (и представлений), которые впоследствии будут созданы в схеме myschema, и разрешите роли webuser также вставлять данные в них:

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;

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