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

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 для этого. Атрибуты, не указанные в команде, сохраняют свои предыдущие настройки. Суперпользователи баз данных могут изменять любые из этих настроек для любой роли, кроме изменения свойства SUPERUSER для суперпользователя начальной загрузки. Роли, не являющиеся суперпользователями, обладающие привилегией CREATEROLE, могут изменять большинство этих свойств, но только для ролей, не являющихся супер-пользователями и репликационными ролями, которым они предоставили ADMIN OPTION. Пользователи, не являющиеся суперпользователями, не могут изменять свойство SUPERUSER и могут изменять свойства CREATEDB, REPLICATION и BYPASSRLS только в том случае, если сами обладают соответствующим свойством. Обычные пользователи могут менять только собственный пароль.

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

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

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

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

Параметры

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