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

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 }
[, ...] | 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 предпочтительнее в дальнейшем как стандартный термин для функций и процедур вместе взятых. В более ранних версиях PostgreSQL допускалось использование только слова FUNCTIONS. Невозможно установить привилегии по умолчанию отдельно для функций и процедур.)

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

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

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

Параметры

target_role

Имя существующей роли, членом которой является текущая роль. Привилегии доступа по умолчанию не наследуются, поэтому роли-члены должны использовать SET ROLE, чтобы получить доступ к этим привилегиям, или ALTER DEFAULT PRIVILEGES должен быть выполнен для каждой роли-члена. Если FOR 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