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
.