ALTER ROLE#
ALTER ROLE
ALTER ROLE — изменить роль базы данных
Синтаксис
ALTER ROLErole_specification
[ WITH ]option
[ ... ] whereoption
can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITconnlimit
| [ ENCRYPTED ] PASSWORD 'password
' | PASSWORD NULL | VALID UNTIL 'timestamp
' ALTER ROLEname
RENAME TOnew_name
ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] SETconfiguration_parameter
FROM CURRENT ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] RESETconfiguration_parameter
ALTER ROLE {role_specification
| ALL } [ IN DATABASEdatabase_name
] RESET ALL whererole_specification
can be:role_name
| CURRENT_ROLE | CURRENT_USER | SESSION_USER
Описание
ALTER ROLE
изменяет атрибуты роли Tantor BE.
Первый вариант этой команды, указанный в синопсисе, может изменить
многие атрибуты роли, которые могут быть указаны в
CREATE ROLE
.
(Все возможные атрибуты охвачены,
за исключением того, что нет опций для добавления или удаления членств; используйте
GRANT
и
REVOKE
для этого.)
Атрибуты, не упомянутые в команде, сохраняют свои предыдущие настройки.
Суперпользователи базы данных могут изменять любые из этих настроек для любой роли.
Роли, не являющиеся суперпользователями, имеющие привилегию CREATEROLE
, могут
изменять большинство этих свойств, но только для ролей, не являющихся суперпользователями и
не являющихся репликационными ролями, для которых им было предоставлено
ADMIN OPTION
. Несуперпользователи не могут изменять
свойство SUPERUSER
и могут изменять свойства
CREATEDB
, REPLICATION
и
BYPASSRLS
только в том случае, если они сами обладают
соответствующим свойством.
Обычные роли могут изменять только свой собственный пароль.
Второй вариант изменяет имя роли.
Суперпользователи базы данных могут переименовывать любую роль.
Роли, обладающие привилегией CREATEROLE
, могут переименовывать роли, не являющиеся суперпользователями, для которых им была предоставлена ADMIN OPTION
.
Текущий пользователь сессии не может быть переименован.
(Подключитесь как другой пользователь, если вам нужно это сделать.)
Поскольку пароли, зашифрованные с помощью MD5
, используют имя роли в качестве криптографической соли, переименование роли очищает ее пароль, если пароль зашифрован с помощью 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
. Дополнительную информацию см. на странице справки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 и Глава 18 для получения дополнительной информации о допустимых именах параметров и их значениях.
Примечания
Используйте 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:
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
является расширением Tantor BE.