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

ALTER ROLE

примечание

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

ALTER ROLE — изменение роли в базе данных.

Синтаксис

ALTER ROLE role_specification [ WITH ] option [ ... ]

where option can be:

SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
| VALID UNTIL 'timestamp'

ALTER ROLE name RENAME TO new_name

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL

where role_specification can be:

role_name
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER

Описание

ALTER ROLE изменяет атрибуты роли PostgreSQL.

Первая форма этой команды (как указано в синтаксисе) позволяет изменять большинство атрибутов роли, которые задаются при создании через CREATE ROLE. Исключение составляют только членства в других ролях — для их изменения используйте команды GRANT и REVOKE. Атрибуты, не указанные в команде, сохраняются без изменений.

Суперпользователи могут изменять любые параметры любых ролей. Роли с привилегией CREATEROLE могут изменять атрибуты других ролей, кроме SUPERUSER, REPLICATION и BYPASSRLS, и только если эти роли не являются суперпользователями или репликационными. Обычные роли могут изменять только собственный пароль.

Вторая форма команды изменяет имя роли. Суперпользователи могут переименовывать любую роль. Роли с привилегией CREATEROLE могут переименовывать другие роли, но только если они не являются суперпользователями. Текущего пользователя сеанса нельзя переименовать (нужно подключиться под другим пользователем). Поскольку пароли, зашифрованные с помощью MD5, используют имя роли как криптографическую «соль», переименование роли приводит к сбросу такого пароля.

Оставшиеся формы команды позволяют задать значения параметров конфигурации, которые будут устанавливаться по умолчанию при старте сессии для конкретной роли — либо для всех баз данных, либо только для указанной базы, если применяется IN DATABASE. Использование ALL вместо имени роли позволяет задать значение параметра для всех ролей. Применение ALL вместе с IN DATABASE аналогично команде ALTER DATABASE ... SET ....

Значение параметра применяется только при входе в новую сессию роли и перекрывает соответствующее значение из postgresql.conf или заданное через параметры запуска postgres. Команды SET ROLE и SET SESSION AUTHORIZATION не вызывают применение новых значений. При наличии нескольких настроек приоритет следующий: настройки конкретной базы для конкретной роли, затем настройки конкретной роли, затем настройки базы.

Суперпользователи могут изменять настройки по умолчанию для любой роли. Роли с привилегией CREATEROLE могут делать это для других ролей без прав суперпользователя. Обычные роли могут настраивать параметры только для себя. Некоторые параметры нельзя изменять этим способом, либо они доступны только суперпользователям. Задание настроек для всех ролей во всех базах также требует прав суперпользователя.

Параметры

name

Указывает имя существующей роли, атрибуты которой должны быть изменены.

CURRENT_ROLE
CURRENT_USER

Указывает на изменение текущей роли или текущей сессии.

SESSION_USER

Указывает на изменение текущего пользователя вместо явно указанной роли.

SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
BYPASSRLS
NOBYPASSRLS
CONNECTION LIMIT connlimit
[ENCRYPTED] PASSWORD 'password'
PASSWORD NULL
VALID UNTIL 'timestamp'

Изменяют атрибуты, первоначально установленные при создании роли. Подробнее о параметрах смотрите в описании CREATE ROLE.

new_name

Задает новое имя роли.

database_name

Задает имя базы данных, для которой задается значение параметра конфигурации.

configuration_parameter
value

Устанавливает для роли значение параметра конфигурации по умолчанию для текущей сессии равным указанному значению value. Если указано DEFAULT или используется RESET, настройка удаляется. RESET ALL удаляет все настройки для роли. SET FROM CURRENT сохраняет текущее значение параметра как значение по умолчанию для роли. Если указано IN DATABASE, параметр конфигурации устанавливается или удаляется только для указанной роли и базы данных.

Настройки параметров, привязанные к роли, вступают в силу только при входе в новую сессию. Команды SET ROLE и SET SESSION AUTHORIZATION не инициируют применение этих настроек.

Список допустимых параметров и их описания приведен в справке по команде SET и в главе «Настройка сервера» документации.

Примечания

Для создания новых ролей используйте CREATE ROLE, для удаления — DROP ROLE.

Команда ALTER ROLE не позволяет изменять членство в других ролях — для этого используйте GRANT и REVOKE.

Будьте осторожны при указании незашифрованного пароля — он может попасть в журнал клиента или сервера. В psql рекомендуется использовать команду \password, чтобы сменить пароль без раскрытия его в открытом текстовом виде.

Также можно задать параметр конфигурации для базы данных через ALTER DATABASE. При конфликте приоритет имеет настройка, заданная для конкретной роли в конкретной базе, затем — для роли, затем — для базы.

Примеры

Изменение пароля роли:

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

Удаление пароля роли:

ALTER ROLE davide WITH PASSWORD NULL;

Задание срока действия пароля — до полудня 4 мая 2015 года по часовому поясу UTC+1:

ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';

Установка бессрочного действия пароля:

ALTER ROLE fred VALID UNTIL 'infinity';

Назначение роли прав на создание баз данных и управление другими ролями:

ALTER ROLE miriam CREATEROLE CREATEDB;

Назначение роли значения параметра maintenance_work_mem, отличного от системного:

ALTER ROLE worker_bee SET maintenance_work_mem = 100000;

Назначение роли значения параметра client_min_messages только для базы devel:

ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

Совместимость

ALTER ROLE является расширением PostgreSQL.

Смотрите также

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET