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_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_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.

При указании с помощью этой команды незашифрованного пароля необходимо соблюдать осторожность. Пароль будет передан на сервер в виде открытого текста, а также может быть зарегистрирован в журнале команд клиента или журнале сервера. qsql содержит команду \\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.

См. также

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET