ALTER ROLE
ALTER ROLE — изменить роль в базе данных
Синтаксис
ALTER ROLE описание_роли [ WITH ] параметр [ ... ]
Где параметром может быть:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT предел_подключений
| [ ENCRYPTED ] PASSWORD 'пароль' | PASSWORD NULL
| VALID UNTIL 'метка_времени'
ALTER ROLE имя RENAME TO новое_имя
ALTER ROLE { описание_роли | ALL } [ IN DATABASE имя_базы_данных ] SET параметр_конфигурации { TO | = } { значение | DEFAULT }
ALTER ROLE { описание_роли | ALL } [ IN DATABASE имя_базы_данных ] SET параметр_конфигурации FROM CURRENT
ALTER ROLE { описание_роли | ALL } [ IN DATABASE имя_базы_данных ] RESET параметр_конфигурации
ALTER ROLE { описание_роли | ALL } [ IN DATABASE имя_базы_данных ] RESET ALL
где описанием_роли может быть:
имя_роли
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER
Описание
Команда ALTER ROLE
изменяет атрибуты роли QHB.
Первый указанный в синтаксисе вариант этой команды может изменить большинство
атрибутов роли, которые можно задать в CREATE ROLE
. (Покрываются все возможные
атрибуты, за исключением возможности добавления/удаления членов роли; для этого
нужно использовать команды GRANT
и REVOKE
.) Атрибуты, не упомянутые в команде,
сохраняют свои предыдущие параметры. Суперпользователи базы данных могут изменять
любые из этих параметров для любой роли. Роли с правом CREATEROLE могут изменять
любые из этих параметров, за исключением SUPERUSER, REPLICATION и
BYPASSRLS, но только не для ролей суперпользователя и репликации. Обычные
роли могут изменить только свой пароль.
Второй вариант меняет название роли. Суперпользователи базы данных могут переименовать любую роль. Роли с правом CREATEROLE могут переименовывать роли, не являющиеся суперпользователями. Текущего пользователя сеанса переименовать нельзя. (Если нужно это сделать, подключитесь как другой пользователь.) Так как в паролях с MD5-шифрованием имя роли используется в качестве криптографической соли, то при переименовании роли ее пароль очищается, если он был зашифрован MD5.
Остальные варианты изменяют значение по умолчанию конфигурационной переменной,
которое будет распространятся на сеансы роли либо для всех баз данных, либо,
если указано IN DATABASE, только для сеансов в указанной базе данных. Если
вместо имени роли указывается ALL, то значение переменной распространяется на
все роли. Использование ALL с IN DATABASE по сути равносильно использованию
команды ALTER DATABASE ... SET ...
.
Когда роль впоследствии запускает новый сеанс, указанное значение становится
значением по умолчанию, переопределяя все настройки, присутствующие в qhb.conf
или полученные из командной строки qhb
. Это происходит только во время входа в
систему; выполнение SET ROLE
или SET SESSION AUTHORIZATION
не вызывает
установки новых значений конфигурации. Параметры, заданные для всех баз данных,
переопределяются установленными для роли параметрами уровня базы данных. Параметры
для конкретных баз данных или ролей могут переопределять только суперпользователи.
Суперпользователи могут менять сеансовые значения по умолчанию для любых ролей. Роли с правом CREATEROLE могут изменять значения по умолчанию для ролей, не являющихся суперпользователями. Обычные роли могут устанавливать значения по умолчанию только для себя. Некоторые переменные конфигурации таким способом установить нельзя или можно установить только в том случае, если команду выполняет суперпользователь. Только суперпользователи могут изменять настройки для всех ролей во всех базах данных.
Параметры
имя
Имя роли, атрибуты которой подлежат изменению.
CURRENT_ROLE
CURRENT_USER
Изменяет текущего пользователя вместо явно определенной роли.
SESSION_USER
Изменяет текущего пользователя сеанса вместо явно определенной роли.
SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
BYPASSRLS
NOBYPASSRLS
CONNECTION LIMIT предел_подключений
[ ENCRYPTED ] PASSWORD 'пароль'
PASSWORD NULL
VALID UNTIL 'метка_времени'
Эти предложения изменяют атрибуты, изначально заданные с помощью команды
CREATE ROLE
. Дополнительную информацию см. на справочной странице команды
CREATE ROLE
.
новое_имя
Новое имя роли.
имя_базы_данных
Имя базы данных, в которой должна быть установлена переменная конфигурации.
параметр_конфигурации
значение
Устанавливает заданное значение по умолчанию в сеансах этой роли для указанного параметра конфигурации. Если значение равно 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, специфичного для заданной базы данных:
ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
Совместимость
Команда ALTER ROLE
является расширением QHB.