15.7.1.1 Заявление ALTER USER
ALTER USER [IF EXISTS]
user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
[COMMENT 'comment_string' | ATTRIBUTE 'json_object']
ALTER USER [IF EXISTS]
USER() user_func_auth_option
ALTER USER [IF EXISTS]
user [registration_option]
ALTER USER [IF EXISTS]
USER() [registration_option]
ALTER USER [IF EXISTS]
user DEFAULT ROLE
{NONE | ALL | role [, role ] ...}
user:
(see Section 8.2.4, “Specifying Account Names”)
auth_option: {
IDENTIFIED BY 'auth_string'
[REPLACE 'current_auth_string']
[RETAIN CURRENT PASSWORD]
| IDENTIFIED BY RANDOM PASSWORD
[REPLACE 'current_auth_string']
[RETAIN CURRENT PASSWORD]
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
[REPLACE 'current_auth_string']
[RETAIN CURRENT PASSWORD]
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
[REPLACE 'current_auth_string']
[RETAIN CURRENT PASSWORD]
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| DISCARD OLD PASSWORD
| ADD factor factor_auth_option [ADD factor factor_auth_option]
| MODIFY factor factor_auth_option [MODIFY factor factor_auth_option]
| DROP factor [DROP factor]
}
user_func_auth_option: {
IDENTIFIED BY 'auth_string'
[REPLACE 'current_auth_string']
[RETAIN CURRENT PASSWORD]
| DISCARD OLD PASSWORD
}
factor_auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED BY RANDOM PASSWORD
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
| IDENTIFIED WITH auth_plugin AS 'auth_string'
}
registration_option: {
factor INITIATE REGISTRATION
| factor FINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'auth_string'
| factor UNREGISTER
}
factor: {2 | 3} FACTOR
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
password_option: {
PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
| PASSWORD HISTORY {DEFAULT | N}
| PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
| PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
| FAILED_LOGIN_ATTEMPTS N
| PASSWORD_LOCK_TIME {N | UNBOUNDED}
}
lock_option: {
ACCOUNT LOCK
| ACCOUNT UNLOCK
}
Заявление ALTER USER изменяет учетные записи MySQL. Оно позволяет изменять аутентификацию, роли, SSL/TLS, лимиты ресурсов, управление паролями, комментарии и свойства атрибутов существующих учетных записей. Также оно может использоваться для блокировки и разблокировки учетных записей.
В большинстве случаев, ALTER USER требует глобального CREATE USER разрешения или UPDATE разрешения для схемы mysql системы. Исключение составляют:
-
Любой клиент, который подключается к серверу с использованием неанонимной учетной записи, может изменить пароль для этой учетной записи. (В частности, вы можете изменить свой собственный пароль.) Чтобы узнать, под какой учетной записью сервер вас аутентифицировал, вызовите функцию
CURRENT_USER():SELECT CURRENT_USER();
-
Для синтаксиса
DEFAULT ROLE,ALTER USERтребует следующих разрешений:Установление стандартных ролей для другого пользователя требует глобального
CREATE USERразрешения илиUPDATEразрешения для таблицы системыmysql.default_roles.Установление стандартных ролей для себя не требует специальных разрешений, если роли, которые вы хотите в качестве стандартных, вам предоставлены.
-
Заявления, которые изменяют вторичные пароли, требуют следующих разрешений:
Для использования предложения
RETAIN CURRENT PASSWORDилиDISCARD OLD PASSWORDдля заявленийALTER USER, которые применяются к вашей собственной учетной записи, требуется разрешениеAPPLICATION_PASSWORD_ADMIN. Разрешение необходимо для управления вашим собственным вторичным паролем, поскольку большинству пользователей нужен только один пароль.Если учетной записи необходимо разрешить управление вторичными паролями для всех учетных записей, требуется разрешение
CREATE USER, а неAPPLICATION_PASSWORD_ADMIN.
При включенном системной переменной read_only, для ALTER USER дополнительно требуется разрешение CONNECTION_ADMIN (или устаревшее разрешение SUPER).
К этим дополнительным соображениям по разрешениям также относятся:
Системная переменная
authentication_policyнакладывает определенные ограничения на использование связанных с аутентификацией предложений заявленийALTER USER. Для получения подробной информации смотрите описание этой переменной. Эти ограничения не применяются, если у вас есть разрешениеAUTHENTICATION_POLICY_ADMIN.Для изменения учетной записи, использующей аутентификацию без пароля, необходимо разрешение
PASSWORDLESS_USER_ADMIN.
По умолчанию, при попытке изменить несуществующего пользователя возникает ошибка. Если используется предложение IF EXISTS, вместо ошибки для каждого несуществующего пользователя выводится предупреждение.
В некоторых случаях, ALTER
USER может быть записано в журналы сервера или на стороне клиента в файле истории, таком как ~/.mysql_history, что означает, что открытые текстовые пароли могут быть прочитаны кем угодно, имеющим доступ для чтения к этой информации. Информацию о ситуациях, в которых это происходит в журналах сервера, и о том, как это контролировать, см. в Разделе 8.1.2.3, «Пароли и ведение журналов». Аналогичную информацию об организации журналов на стороне клиента см. в Разделе 6.5.1.3, «Ведение журналов клиента mysql».
Различные аспекты заявления ALTER
USER описаны в следующих разделах:
Обзор ALTER USER
Для каждого затронутого аккаунта ALTER
USER изменяет соответствующую строку в таблице системы mysql.user, чтобы отразить свойства, указанные в операторе. Неуказанные свойства сохраняют свои текущие значения.
Каждое имя аккаунта использует формат, описанный в разделе 8.2.4 «Указание имён аккаунтов». Часть имени хоста аккаунта, если она опущена, по умолчанию равна '%'. Также можно указать CURRENT_USER или CURRENT_USER() для ссылки на аккаунт, связанный с текущей сессией.
В единственном случае аккаунт может быть указан с помощью функции USER():
ALTER USER USER() IDENTIFIED BY 'auth_string';
Этот синтаксис позволяет изменить свой собственный пароль, не называя свой аккаунт напрямую. (Синтаксис также поддерживает клаузы REPLACE, RETAIN CURRENT
PASSWORD и DISCARD OLD
PASSWORD, описанные в разделе Параметры аутентификации ALTER USER.)
Для синтаксиса ALTER USER, который допускает значение auth_option после значения user, auth_option показывает, как аккаунт выполняет аутентификацию, указав плагин аутентификации аккаунта, учетные данные (например, пароль) или оба. Каждое значение auth_option применяется только к аккаунту, указанному непосредственно перед ним.
После указания свойств user оператор может включать опции для SSL/TLS, лимитов ресурсов, управления паролями и свойств блокировки. Все такие опции являются глобальными для оператора и применяются к всем аккаунтам, указанным в операторе.
Пример: Изменить пароль аккаунта и установить его срок действия. В результате пользователь должен подключиться с указанным паролем и выбрать новый при следующем подключении:
ALTER USER 'jeffrey'@'localhost'
IDENTIFIED BY 'new_password' PASSWORD EXPIRE;
Пример: Изменить аккаунт, чтобы использовать плагин аутентификации caching_sha2_password и заданный пароль. Требуется, чтобы новый пароль выбирался каждые 180 дней, и включить отслеживание неудачных попыток входа, так что три последовательных неправильных пароля приведут к временной блокировке аккаунта на два дня:
ALTER USER 'jeffrey'@'localhost'
IDENTIFIED WITH caching_sha2_password BY 'new_password'
PASSWORD EXPIRE INTERVAL 180 DAY
FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
Пример: Заблокировать или разблокировать аккаунт:
ALTER USER 'jeffrey'@'localhost' ACCOUNT LOCK;
ALTER USER 'jeffrey'@'localhost' ACCOUNT UNLOCK;
Пример: Требовать, чтобы аккаунт подключался с использованием SSL и устанавливать лимит в 20 подключений в час:
ALTER USER 'jeffrey'@'localhost'
REQUIRE SSL WITH MAX_CONNECTIONS_PER_HOUR 20;
Пример: Изменить несколько аккаунтов, указав некоторые свойства для каждого аккаунта и некоторые глобальные свойства:
ALTER USER
'jeffrey'@'localhost'
IDENTIFIED BY 'jeffrey_new_password',
'jeanne'@'localhost',
'josh'@'localhost'
IDENTIFIED BY 'josh_new_password'
REPLACE 'josh_current_password'
RETAIN CURRENT PASSWORD
REQUIRE SSL WITH MAX_USER_CONNECTIONS 2
PASSWORD HISTORY 5;
Значение IDENTIFIED BY, следующая за jeffrey, применяется только к предшествующему аккаунту, поэтому оно меняет пароль на ' только для jeffrey_new_password'jeffrey. Для jeanne нет значения для каждого аккаунта (что приводит к тому, что пароль остается неизменным). Для josh, IDENTIFIED BY устанавливает новый пароль ('), josh_new_password'REPLACE указывается, чтобы проверить, что пользователь, выполняющий оператор ALTER USER, знает текущий пароль ('), и что текущий пароль также сохраняется как вторичный пароль аккаунта. (В результате josh_current_password'josh может подключиться с использованием основного или вторичного пароля.)
Остальные свойства применяются глобально ко всем аккаунтам, указанным в операторе, поэтому для обоих аккаунтов:
Для подключений требуется использование SSL.
Аккаунт может использоваться для максимум двух одновременных подключений.
Изменение пароля не может использовать ни один из пяти последних паролей.
Пример: Удалить вторичный пароль для josh, оставив аккаунт только с основным паролем:
ALTER USER 'josh'@'localhost' DISCARD OLD PASSWORD;
В отсутствие конкретного типа опции аккаунт остается неизменным в этом отношении. Например, при отсутствии опции блокировки состояние блокировки аккаунта не изменяется.
Параметры аутентификации ALTER USER
Имя учетной записи может быть дополнено параметром аутентификации auth_option, который определяет плагин аутентификации, учетные данные или оба. Он также может включать условие проверки пароля, определяющее текущий пароль учетной записи, который необходимо заменить, и условия управления наличием у учетной записи дополнительного пароля.
Условие генерации случайного пароля, проверки пароля и дополнительных паролей применяется только к учетным записям, использующим плагин аутентификации, который хранит учетные данные внутри MySQL. Для учетных записей, использующих плагин, который выполняет аутентификацию на внешней системе учетных данных по отношению к MySQL, управление паролями также должно осуществляться на этой внешней системе. Дополнительную информацию о внутреннем хранении учетных данных см. в разделе 8.2.15 «Управление паролями».
-
auth_pluginназначает плагин аутентификации. Имя плагина может быть строковым литералом в кавычках или неопределённым именем. Имена плагинов хранятся в столбцеpluginтаблицы системыmysql.user.Для синтаксиса
auth_option, который не определяет плагин аутентификации, сервер назначает плагин по умолчанию, определённый, как описано в Плагине аутентификации по умолчанию. Описание каждого плагина см. в разделе 8.4.1 «Плагины аутентификации». -
Учетные данные, хранящиеся внутри, хранятся в таблице системы
mysql.user. Значение'илиauth_string'RANDOM PASSWORDопределяет учетные данные учетной записи, либо в виде открытого текста (незашифрованного) строки, либо в формате хэширования, ожидаемом плагином аутентификации, связанным с учетной записью:Для синтаксиса, использующего
BY ', строка представляет собой открытый текст и передаётся плагину аутентификации для возможного хэширования. Результат, возвращённый плагином, сохраняется в таблицеauth_string'mysql.user. Плагин может использовать значение как указано, в этом случае хэширование не выполняется.-
Для синтаксиса, использующего
BY RANDOM PASSWORD, MySQL генерирует случайный пароль в виде открытого текста и передаёт его плагину аутентификации для возможного хэширования. Результат, возвращённый плагином, сохраняется в таблицеmysql.user. Плагин может использовать значение как указано, в этом случае хэширование не выполняется.Случайно сгенерированные пароли обладают характеристиками, описанными в генерации случайных паролей.
-
Для синтаксиса, использующего
AS ', строка предполагается уже в формате, требуемом плагином аутентификации, и хранится как есть в таблицеauth_string'mysql.user. Если плагин требует хэшированное значение, значение должно быть уже хэшировано в формате, соответствующем плагину; в противном случае значение не может быть использовано плагином, и правильная аутентификация клиентских подключений не произойдёт.Хэшированная строка может быть либо строковым литералом, либо шестнадцатеричным значением. Последнее соответствует типу значения, отображаемого
SHOW CREATE USERдля хэшей паролей, содержащих непечатаемые символы, когда переменная системыprint_identified_with_as_hexвключена. Если плагин аутентификации не выполняет хэширование строки аутентификации, клаузы
BY 'иauth_string'AS 'имеют одинаковый эффект: строка аутентификации сохраняется как есть в таблице системыauth_string'mysql.user.
-
Клауза
REPLACE 'выполняет проверку пароля. При её использовании:current_auth_string'REPLACEопределяет текущий пароль учетной записи, который необходимо заменить, как строку открытого текста (незашифрованную).Эта клауза обязательна, если требуется изменение пароля учетной записи и необходимо указать текущий пароль для проверки того, что пользователь, пытающийся изменить пароль, действительно знает текущий пароль.
Эта клауза необязательна, если изменение пароля учетной записи может, но не обязательно, указывать текущий пароль.
Запрос завершается неудачно, если клауза указана, но не соответствует текущему паролю, даже если она необязательна.
REPLACEможет быть указано только при изменении пароля учетной записи текущим пользователем.
Дополнительную информацию о проверке пароля путём указания текущего пароля см. в разделе 8.2.15 «Управление паролями».
-
Клаузы
RETAIN CURRENT PASSWORDиDISCARD OLD PASSWORDреализуют возможность двойного пароля. Обе являются необязательными, но если указаны, то имеют следующие последствия:RETAIN CURRENT PASSWORDсохраняет текущий пароль учетной записи в качестве дополнительного пароля, заменяя любой существующий дополнительный пароль. Новый пароль становится основным, но клиенты могут использовать учетную запись для подключения к серверу, используя как основной, так и дополнительный пароль. (Исключение: Если новый пароль, указанный в оператореALTER USER, пустой, дополнительный пароль также становится пустым, даже если указанRETAIN CURRENT PASSWORD).Если вы укажете
RETAIN CURRENT PASSWORDдля учетной записи с пустым основным паролем, запрос завершится неудачно.Если у учетной записи есть дополнительный пароль, и вы меняете её основной пароль, не указывая
RETAIN CURRENT PASSWORD, дополнительный пароль останется без изменений.Если вы меняете плагин аутентификации, назначенный для учетной записи, дополнительный пароль удаляется. Если вы меняете плагин аутентификации и также укажете
RETAIN CURRENT PASSWORD, запрос завершится неудачно.DISCARD OLD PASSWORDудаляет дополнительный пароль, если он существует. Учетная запись сохраняет только основной пароль, и клиенты могут использовать учетную запись для подключения к серверу только с основным паролем.
Дополнительную информацию об использовании двойных паролей см. в разделе 8.2.15 «Управление паролями».
ALTER USER допускает эти синтаксические конструкции auth_option:
-
IDENTIFIED BY 'auth_string' [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD]Устанавливает плагин аутентификации учетной записи на плагин по умолчанию, передает значение нешифрованного
'плагину для возможного хеширования и сохраняет результат в строке учетной записи в таблице системыauth_string'mysql.user.Оператор
REPLACE, если задан, указывает текущий пароль учетной записи, как описано ранее в этом разделе.Оператор
RETAIN CURRENT PASSWORD, если задан, заставляет текущий пароль учетной записи сохраниться как вторичный пароль, как описано ранее в этом разделе. -
IDENTIFIED BY RANDOM PASSWORD [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD]Устанавливает плагин аутентификации учетной записи на плагин по умолчанию, генерирует случайный пароль, передает значение нешифрованного пароля плагину для возможного хеширования и сохраняет результат в строке учетной записи в таблице системы
mysql.user. Выражение также возвращает нешифрованный пароль в наборе результатов, чтобы сделать его доступным для пользователя или приложения, выполняющего выражение. Подробности о наборе результатов и характеристиках случайно сгенерированных паролей см. в разделе Генерация случайных паролей.Оператор
REPLACE, если задан, указывает текущий пароль учетной записи, как описано ранее в этом разделе.Оператор
RETAIN CURRENT PASSWORD, если задан, заставляет текущий пароль учетной записи сохраниться как вторичный пароль, как описано ранее в этом разделе. -
IDENTIFIED WITHauth_pluginУстанавливает плагин аутентификации учетной записи на
auth_plugin, очищает учетные данные до пустой строки (учетные данные связаны со старым плагином аутентификации, а не с новым) и сохраняет результат в строке учетной записи в таблице системыmysql.user.Кроме того, пароль помечается как истекший. Пользователь должен выбрать новый при следующем подключении.
-
IDENTIFIED WITHauth_pluginBY 'auth_string' [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD]Устанавливает плагин аутентификации учетной записи на
auth_plugin, передает значение нешифрованного'плагину для возможного хеширования и сохраняет результат в строке учетной записи в таблице системыauth_string'mysql.user.Оператор
REPLACE, если задан, указывает текущий пароль учетной записи, как описано ранее в этом разделе.Оператор
RETAIN CURRENT PASSWORD, если задан, заставляет текущий пароль учетной записи сохраниться как вторичный пароль, как описано ранее в этом разделе. -
IDENTIFIED WITHauth_pluginBY RANDOM PASSWORD [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD]Устанавливает плагин аутентификации учетной записи на
auth_plugin, генерирует случайный пароль, передает значение нешифрованного пароля плагину для возможного хеширования и сохраняет результат в строке учетной записи в таблице системыmysql.user. Выражение также возвращает нешифрованный пароль в наборе результатов, чтобы сделать его доступным для пользователя или приложения, выполняющего выражение. Подробности о наборе результатов и характеристиках случайно сгенерированных паролей см. в разделе Генерация случайных паролей.Оператор
REPLACE, если задан, указывает текущий пароль учетной записи, как описано ранее в этом разделе.Оператор
RETAIN CURRENT PASSWORD, если задан, заставляет текущий пароль учетной записи сохраниться как вторичный пароль, как описано ранее в этом разделе. -
IDENTIFIED WITHauth_pluginAS 'auth_string'Устанавливает плагин аутентификации учетной записи на
auth_pluginи сохраняет значение'как есть в строке учетной записиauth_string'mysql.user. Если плагину требуется хешированная строка, предполагается, что строка уже хеширована в формате, требуемом плагином. -
DISCARD OLD PASSWORDУдаляет вторичный пароль учетной записи, если он есть, как описано ранее в этом разделе.
Пример: Укажите пароль как нешифрованный текст; используется плагин по умолчанию:
ALTER USER 'jeffrey'@'localhost'
IDENTIFIED BY 'password';
Пример: Укажите плагин аутентификации вместе со значением нешифрованного пароля:
ALTER USER 'jeffrey'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'password';
Пример: Как в предыдущем примере, но дополнительно укажите текущий пароль как значение нешифрованного текста, чтобы удовлетворить любое требование учетной записи, согласно которому пользователь, производящий изменение, знает этот пароль:
ALTER USER 'jeffrey'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'password'
REPLACE 'current_password';
Предшествующее выражение завершается ошибкой, если текущий пользователь не jeffrey, потому что REPLACE разрешено только для изменений пароля текущего пользователя.
Пример: Установите новый первичный пароль и сохраните существующий пароль как вторичный пароль:
ALTER USER 'jeffrey'@'localhost'
IDENTIFIED BY 'new_password'
RETAIN CURRENT PASSWORD;
Пример: Удалите вторичный пароль, оставив в учетной записи только первичный пароль:
ALTER USER 'jeffery'@'localhost' DISCARD OLD PASSWORD;
Пример: Укажите плагин аутентификации вместе со значением хешированного пароля:
ALTER USER 'jeffrey'@'localhost'
IDENTIFIED WITH mysql_native_password
AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
Дополнительную информацию о настройке паролей и плагинах аутентификации см. в разделе 8.2.14 Назначение паролей учетной записи и 8.2.17 Подключаемая аутентификация.
Параметры многофакторной аутентификации ALTER USER
ALTER USER имеет операторы ADD, MODIFY и DROP, которые позволяют добавлять, изменять или удалять факторы аутентификации. В каждом случае оператор указывает операцию, выполняемую с одним фактором аутентификации, и необязательно операцию с другим фактором аутентификации. Для каждой операции элемент factor указывает ключевое слово FACTOR, предваряемое числом 2 или 3, чтобы указать, относится ли операция ко второму или третьему фактору аутентификации. (1 в этом контексте не допускается. Чтобы действовать с первым фактором аутентификации, используйте синтаксис, описанный в Параметры аутентификации ALTER USER.)
Ограничения оператора ALTER USER многофакторной аутентификации определяются системной переменной authentication_policy. Например, значение authentication_policy управляет количеством факторов аутентификации, которые могут иметь учетные записи, и для каждого фактора, какие методы аутентификации разрешены. См. Настройка политики многофакторной аутентификации.
Когда ALTER USER добавляет, изменяет или удаляет второй и третий факторы в одном операторе, операции выполняются последовательно, но если какая-либо операция в последовательности завершается ошибкой, весь оператор ALTER
USER завершается ошибкой.
Для ADD каждый указанный фактор не должен уже существовать, иначе его нельзя добавить. Для MODIFY и DROP каждый указанный фактор должен существовать, чтобы его можно было изменить или удалить. Если определены второй и третий факторы, удаление второго фактора приводит к тому, что третий фактор занимает его место в качестве второго фактора.
Это выражение удаляет факторы аутентификации 2 и 3, что приводит к преобразованию учетной записи из 3FA в 1FA:
ALTER USER 'user' DROP 2 FACTOR 3 FACTOR;
Для дополнительных ADD, MODIFY и DROP примеров см. Начало работы с многофакторной аутентификацией.
Сведения о факторно-специфических правилах, определяющих плагин аутентификации по умолчанию для операторов аутентификации, не указывающих плагин, см. в разделе Плагин аутентификации по умолчанию.
Параметры регистрации ALTER USER
ALTER USER содержит операторы, позволяющие регистрировать и аннулировать устройства FIDO/FIDO2. Дополнительную информацию см. в разделах Использование аутентификации WebAuthn, Удаление регистрации устройства для WebAuthn и описании опции --register-factor клиента mysql.
Опция --register-factor клиента mysql, используемая для регистрации устройств FIDO/FIDO2, заставляет клиента mysql сгенерировать и выполнить операторы INITIATE REGISTRATION и FINISH
REGISTRATION. Эти операторы не предназначены для ручного выполнения.
Параметры ALTER USER для роли
ALTER USER ...
DEFAULT ROLE определяет, какие роли станут активными при подключении пользователя к серверу и аутентификации, или при выполнении пользователем инструкции SET ROLE
DEFAULT в сессии.
ALTER USER ...
DEFAULT ROLE является альтернативной синтаксической конструкцией для SET DEFAULT ROLE (см. Раздел 15.7.1.9, «Инструкция SET DEFAULT ROLE»). Однако, ALTER USER может установить значение по умолчанию только для одного пользователя, в то время как SET
DEFAULT ROLE может установить значение по умолчанию для нескольких пользователей. С другой стороны, вы можете указать CURRENT_USER в качестве имени пользователя для инструкции ALTER USER, но не для SET DEFAULT
ROLE.
Каждое имя учетной записи пользователя использует описанный ранее формат.
Каждое имя роли использует формат, описанный в Разделе 8.2.5, «Указание имён ролей». Например:
ALTER USER 'joe'@'10.0.0.1' DEFAULT ROLE administrator, developer;
Часть имени роли, относящаяся к имени хоста, если она опущена, по умолчанию равна '%'.
Клауза, следующая за ключевыми словами DEFAULT ROLE, допускает следующие значения:
NONE: Установить значение по умолчанию наNONE(без ролей).ALL: Установить значение по умолчанию на все роли, предоставленные учетной записи.: Установить значение по умолчанию на указанные роли, которые должны существовать и быть предоставлены учетной записи на момент выполнения инструкцииrole[,role] ...ALTER USER ... DEFAULT ROLE.
Параметры ALTER USER для SSL/TLS
MySQL может проверять атрибуты сертификатов X.509 помимо обычной аутентификации на основе имени пользователя и учетных данных. Дополнительную информацию об использовании SSL/TLS с MySQL см. в Разделе 8.3, «Использование шифрованных подключений».
Для указания параметров SSL/TLS для учетной записи MySQL используйте клаузу REQUIRE, которая определяет одно или несколько значений tls_option.
Порядок параметров REQUIRE не имеет значения, но один и тот же параметр нельзя указать дважды. Ключевое слово AND является необязательным между параметрами REQUIRE.
Инструкция ALTER USER допускает следующие значения tls_option:
-
NONEУказывает, что все учетные записи, перечисленные в инструкции, не имеют требований к SSL или X.509. Разрешены нешифрованные подключения, если имя пользователя и пароль действительны. Шифрованные подключения могут быть использованы по выбору клиента, если у клиента есть соответствующие файлы сертификата и ключа.
ALTER USER 'jeffrey'@'localhost' REQUIRE NONE;
Клиенты по умолчанию пытаются установить защищённое соединение. Для клиентов с
REQUIRE NONEпопытка подключения переходит к нешифрованному подключению, если защищённое соединение установить невозможно. Чтобы потребовать шифрованное соединение, клиенту нужно только указать параметр--ssl-mode=REQUIRED; попытка подключения завершается ошибкой, если защищённое соединение установить невозможно. -
SSLУказывает серверу разрешить только шифрованные подключения для всех учетных записей, указанных в инструкции.
ALTER USER 'jeffrey'@'localhost' REQUIRE SSL;
Клиенты по умолчанию пытаются установить защищённое соединение. Для учетных записей с
REQUIRE SSLпопытка подключения завершается ошибкой, если защищённое соединение установить невозможно. -
X509Для всех учетных записей, перечисленных в инструкции, требуется, чтобы клиенты предоставили действительный сертификат, но точный сертификат, издатель и субъект не имеют значения. Единственное требование заключается в возможности проверки его подписи с помощью одного из сертификатов УЦ. Использование сертификатов X.509 всегда подразумевает шифрование, поэтому параметр
SSLв данном случае не требуется.ALTER USER 'jeffrey'@'localhost' REQUIRE X509;
Для учетных записей с
REQUIRE X509клиентам необходимо указать параметры--ssl-keyи--ssl-certдля подключения. (Рекомендуется, но не обязательно, указать также--ssl-ca, чтобы можно было проверить общедоступный сертификат, предоставленный сервером.) Это справедливо и дляISSUERиSUBJECT, так как эти параметрыREQUIREподразумевают требованияX509. - ... (остальные пункты переведены аналогично) ...
... (остальные элементы HTML переведены аналогично) ...
Параметры лимитов ресурсов пользователя ALTER USER
Можно установить лимиты использования ресурсов сервера для учетной записи, как описано в разделе 8.2.21, «Установка лимитов ресурсов учетной записи». Для этого используйте предложение WITH, которое задает одно или несколько значений resource_option.
Порядок следования параметров WITH не имеет значения, за исключением того, что если заданный лимит ресурсов указан несколько раз, приоритет имеет последнее значение.
ALTER USER допускает эти значения resource_option:
-
MAX_QUERIES_PER_HOUR,countMAX_UPDATES_PER_HOUR,countMAX_CONNECTIONS_PER_HOURcountДля всех учетных записей, указанных в предложении, эти параметры ограничивают количество запросов, обновлений и подключений к серверу, разрешенных для каждой учетной записи в течение любого одного часа. Если
countравно0(по умолчанию), это означает, что для учетной записи нет ограничений. -
MAX_USER_CONNECTIONScountДля всех учетных записей, указанных в предложении, ограничивает максимальное количество одновременных подключений к серверу для каждой учетной записи. ненулевое значение
countявно задает лимит для учетной записи. Еслиcountравно0(по умолчанию), сервер определяет количество одновременных подключений для учетной записи из глобального значения системной переменнойmax_user_connections. Еслиmax_user_connectionsтакже равно нулю, для учетной записи нет ограничений.
Пример:
ALTER USER 'jeffrey'@'localhost'
WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
Параметры управления паролями ALTER USER
ALTER USER поддерживает несколько значений password_option для управления паролями:
Параметры истечения срока действия пароля: вы можете вручную установить истечение срока действия пароля учетной записи и определить политику истечения срока действия пароля. Параметры политики не приводят к истечению срока действия пароля. Вместо этого они определяют, как сервер применяет автоматическое истечение срока действия к учетной записи на основе возраста пароля, который оценивается по дате и времени последнего изменения пароля учетной записи.
Параметры повторного использования пароля: вы можете ограничить повторное использование пароля на основе числа изменений пароля, прошедшего времени или того и другого.
Параметры обязательной проверки пароля: вы можете указать, должны ли попытки изменить пароль учетной записи указывать текущий пароль, в качестве подтверждения того, что пользователь, пытающийся внести изменения, действительно знает текущий пароль.
Параметры отслеживания неудачных попыток входа с неправильным паролем: вы можете заставить сервер отслеживать неудачные попытки входа и временно блокировать учетные записи, для которых указано слишком много неправильных паролей подряд. Необходимое количество неудач и время блокировки настраиваются.
В этом разделе описывается синтаксис параметров управления паролями. Для получения информации о создании политики управления паролями см. Раздел 8.2.15, «Управление паролями».
Если указано несколько параметров управления паролями одного типа, последний имеет приоритет. Например, PASSWORD EXPIRE DEFAULT PASSWORD EXPIRE
NEVER то же самое, что и PASSWORD EXPIRE
NEVER.
За исключением параметров, относящихся к отслеживанию неудачных попыток входа, параметры управления паролями применяются только к учетным записям, использующим подключаемый модуль аутентификации, который хранит учетные данные внутри MySQL. Для учетных записей, использующих подключаемый модуль, который выполняет аутентификацию по отношению к системе учетных данных, внешней по отношению к MySQL, управление паролями также должно выполняться внешне по отношению к этой системе. Для получения дополнительной информации о внутреннем хранении учетных данных см. Раздел 8.2.15, «Управление паролями».
Пароль клиента устарел, если срок действия пароля учетной записи истек вручную или возраст пароля считается больше, чем допустимый срок службы в соответствии с политикой автоматического истечения срока действия. В этом случае сервер либо отключает клиента, либо ограничивает разрешенные ему операции (см. Раздел 8.2.16, «Обработка сервером истекших паролей»). Операции, выполняемые ограниченным клиентом, приводят к ошибке, пока пользователь не установит новый пароль учетной записи.
Хотя можно “сбросить” истекший пароль, установив его текущее значение, предпочтительнее, в соответствии с хорошей политикой, выбрать другой пароль. Администраторы баз данных могут обеспечить невозможность повторного использования, установив соответствующую политику повторного использования пароля. См. Политика повторного использования пароля.
ALTER USER допускает следующие значения password_option для управления истечением срока действия пароля:
-
PASSWORD EXPIREНемедленно помечает пароль как устаревший для всех учетных записей, указанных в операторе.
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
-
PASSWORD EXPIRE DEFAULTУстанавливает для всех учетных записей, указанных в операторе, применение глобальной политики истечения срока действия, как указано в переменной системы
default_password_lifetime.ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
-
PASSWORD EXPIRE NEVERЭтот параметр истечения срока действия переопределяет глобальную политику для всех учетных записей, указанных в операторе. Для каждой из них отключается истечение срока действия пароля, так что пароль никогда не истекает.
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
-
PASSWORD EXPIRE INTERVALNDAYЭтот параметр истечения срока действия переопределяет глобальную политику для всех учетных записей, указанных в операторе. Для каждой из них устанавливается срок действия пароля на
Nдней. Следующий оператор требует изменения пароля каждые 180 дней:ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
ALTER USER допускает следующие значения password_option для управления повторным использованием предыдущих паролей на основе необходимого минимального числа изменений пароля:
-
PASSWORD HISTORY DEFAULTУстанавливает для всех учетных записей, указанных в операторе, применение глобальной политики относительно длины истории паролей, чтобы запретить повторное использование паролей до числа изменений, указанного в переменной системы
password_history.ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY DEFAULT;
-
PASSWORD HISTORYNЭтот параметр длины истории переопределяет глобальную политику для всех учетных записей, указанных в операторе. Для каждой из них устанавливается длина истории паролей в
Nпаролей, чтобы запретить повторное использование любых изNпоследних выбранных паролей. Следующий оператор запрещает повторное использование любых из 6 предыдущих паролей:ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY 6;
ALTER USER допускает следующие значения password_option для управления повторным использованием предыдущих паролей на основе прошедшего времени:
-
PASSWORD REUSE INTERVAL DEFAULTУстанавливает для всех операторов, указанных в учетной записи, применение глобальной политики относительно прошедшего времени, чтобы запретить повторное использование паролей, более новых, чем число дней, указанное в переменной системы
password_reuse_interval.ALTER USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL DEFAULT;
-
PASSWORD REUSE INTERVALNDAYЭтот параметр прошедшего времени переопределяет глобальную политику для всех учетных записей, указанных в операторе. Для каждой из них устанавливается интервал повторного использования пароля в
Nдней, чтобы запретить повторное использование паролей, более новых, чем указанное количество дней. Следующий оператор запрещает повторное использование пароля в течение 360 дней:ALTER USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL 360 DAY;
ALTER USER допускает следующие значения password_option для управления тем, должны ли попытки изменить пароль учетной записи указывать текущий пароль, в качестве подтверждения того, что пользователь, пытающийся внести изменения, действительно знает текущий пароль:
-
PASSWORD REQUIRE CURRENTЭтот параметр проверки переопределяет глобальную политику для всех учетных записей, указанных в операторе. Для каждой из них требуется, чтобы при изменении пароля указывался текущий пароль.
ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT;
-
PASSWORD REQUIRE CURRENT OPTIONALЭтот параметр проверки переопределяет глобальную политику для всех учетных записей, указанных в операторе. Для каждой из них не требуется, чтобы при изменении пароля указывался текущий пароль. (Текущий пароль может, но не должен указываться.)
ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT OPTIONAL;
-
PASSWORD REQUIRE CURRENT DEFAULTУстанавливает для всех операторов, указанных в учетной записи, применение глобальной политики проверки пароля, как указано в переменной системы
password_require_current.ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT DEFAULT;
ALTER USER допускает следующие значения password_option для управления отслеживанием неудачных попыток входа:
-
FAILED_LOGIN_ATTEMPTSNСледует ли отслеживать попытки входа в учетную запись, указывающие неправильный пароль.
Nдолжно быть числом от 0 до 32767. Значение 0 отключает отслеживание неудачных попыток входа. Значения, большие 0, указывают, сколько неудачных попыток ввода пароля подряд приводят к временной блокировке учетной записи (еслиPASSWORD_LOCK_TIMEтакже не равно нулю). -
PASSWORD_LOCK_TIME {N| UNBOUNDED}Как долго блокировать учетную запись после того, как слишком много попыток входа подряд указали неправильный пароль.
Nдолжно быть числом от 0 до 32767 илиUNBOUNDED. Значение 0 отключает временную блокировку учетной записи. Значения, большие 0, указывают, как долго блокировать учетную запись в днях. ЗначениеUNBOUNDEDприводит к неограниченной продолжительности блокировки учетной записи; после блокировки учетная запись остается заблокированной до разблокировки. Для получения информации об условиях, при которых происходит разблокировка, см. Отслеживание неудачных попыток входа и временная блокировка учетной записи.
Для отслеживания неудачных попыток входа и временной блокировки параметры FAILED_LOGIN_ATTEMPTS и PASSWORD_LOCK_TIME учетной записи должны быть отличны от нуля. Следующий оператор изменяет учетную запись таким образом, что она остается заблокированной в течение двух дней после четырех неудачных попыток ввода пароля подряд:
ALTER USER 'jeffrey'@'localhost'
FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 2;
Варианты комментариев и атрибутов пользователя ALTER USER
MySQL 8.4 поддерживает комментарии и атрибуты пользователей, как описано в разделе 15.7.1.3 «Заявление CREATE USER». Их можно изменить, используя ALTER USER с помощью опций COMMENT и ATTRIBUTE соответственно. Вы не можете указать обе опции в одном и том же заявлении ALTER USER; попытка сделать это приводит к синтаксической ошибке.
Комментарий и атрибут пользователя хранятся в таблице схемы информации USER_ATTRIBUTES в виде JSON-объекта; комментарий пользователя хранится как значение для ключа comment в столбце ATTRIBUTE этой таблицы, как показано далее в этом обсуждении. Текст COMMENT может быть любым произвольным цитируемым текстом и заменяет любой существующий комментарий пользователя. Значение ATTRIBUTE должно быть корректным строковым представлением JSON-объекта. Это объединяется с любым существующим атрибутом пользователя, как если бы функция JSON_MERGE_PATCH() использовалась для существующего атрибута пользователя и нового; для любых повторно используемых ключей новое значение перезаписывает старое, как показано здесь:
mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
-> WHERE USER='bill' AND HOST='localhost';
+------+-----------+----------------+
| USER | HOST | ATTRIBUTE |
+------+-----------+----------------+
| bill | localhost | {"foo": "bar"} |
+------+-----------+----------------+
1 row in set (0.11 sec)
mysql> ALTER USER 'bill'@'localhost' ATTRIBUTE '{"baz": "faz", "foo": "moo"}';
Query OK, 0 rows affected (0.22 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
-> WHERE USER='bill' AND HOST='localhost';
+------+-----------+------------------------------+
| USER | HOST | ATTRIBUTE |
+------+-----------+------------------------------+
| bill | localhost | {"baz": "faz", "foo": "moo"} |
+------+-----------+------------------------------+
1 row in set (0.00 sec)
Чтобы удалить ключ и его значение из атрибута пользователя, установите ключ в JSON null (должен быть в нижнем регистре и без кавычек), как показано ниже:
mysql> ALTER USER 'bill'@'localhost' ATTRIBUTE '{"foo": null}';
Query OK, 0 rows affected (0.08 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
-> WHERE USER='bill' AND HOST='localhost';
+------+-----------+----------------+
| USER | HOST | ATTRIBUTE |
+------+-----------+----------------+
| bill | localhost | {"baz": "faz"} |
+------+-----------+----------------+
1 row in set (0.00 sec)
Чтобы установить существующий комментарий пользователя на пустую строку, используйте ALTER USER ... COMMENT ''. Это оставляет пустое comment значение в таблице USER_ATTRIBUTES; чтобы полностью удалить комментарий пользователя, используйте ALTER USER ...
ATTRIBUTE ... со значением для ключа столбца, установленным в JSON null (без кавычек, строчные буквы). Это проиллюстрировано следующей последовательностью SQL-заявлений:
mysql> ALTER USER 'bill'@'localhost' COMMENT 'Something about Bill';
Query OK, 0 rows affected (0.06 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
-> WHERE USER='bill' AND HOST='localhost';
+------+-----------+---------------------------------------------------+
| USER | HOST | ATTRIBUTE |
+------+-----------+---------------------------------------------------+
| bill | localhost | {"baz": "faz", "comment": "Something about Bill"} |
+------+-----------+---------------------------------------------------+
1 row in set (0.00 sec)
mysql> ALTER USER 'bill'@'localhost' COMMENT '';
Query OK, 0 rows affected (0.09 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
-> WHERE USER='bill' AND HOST='localhost';
+------+-----------+-------------------------------+
| USER | HOST | ATTRIBUTE |
+------+-----------+-------------------------------+
| bill | localhost | {"baz": "faz", "comment": ""} |
+------+-----------+-------------------------------+
1 row in set (0.00 sec)
mysql> ALTER USER 'bill'@'localhost' ATTRIBUTE '{"comment": null}';
Query OK, 0 rows affected (0.07 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
-> WHERE USER='bill' AND HOST='localhost';
+------+-----------+----------------+
| USER | HOST | ATTRIBUTE |
+------+-----------+----------------+
| bill | localhost | {"baz": "faz"} |
+------+-----------+----------------+
1 row in set (0.00 sec)
Параметры блокировки учетных записей ALTER USER
MySQL поддерживает блокировку и разблокировку учетных записей с помощью опций ACCOUNT LOCK и ACCOUNT
UNLOCK, которые указывают состояние блокировки учетной записи. Более подробная информация приведена в разделе 8.2.20 «Блокировка учетных записей».
Если указано несколько параметров блокировки учетной записи, приоритет имеет последний.
ALTER USER ...
ACCOUNT UNLOCK разблокирует любую учетную запись, указанную в заявлении, которая временно заблокирована из-за слишком большого количества неудачных попыток входа. См. раздел 8.2.15 «Управление паролями».
Логирование двоичных данных ALTER USER
ALTER USER записывается в двоичный журнал, если он выполняется успешно, но не в случае неудачи; в этом случае происходит откат и никаких изменений не вносится. Заявление, записанное в двоичный журнал, включает всех указанных пользователей. Если указан пункт IF
EXISTS, это включает даже пользователей, которые не существуют и не были изменены.
Если исходное заявление изменяет учетные данные пользователя, заявление, записанное в двоичный журнал, указывает соответствующий плагин аутентификации для этого пользователя, определяемый следующим образом:
Плагин, указанный в исходном заявлении, если он был указан.
В противном случае плагин, связанный с учетной записью пользователя, если пользователь существует, или плагин по умолчанию, если пользователь не существует. (Если в заявлении, записанном в двоичный журнал, необходимо указать конкретный плагин аутентификации для пользователя, укажите его в исходном заявлении.)
Если сервер добавляет плагин по умолчанию для любых пользователей в заявлении, записанном в двоичный журнал, он запишет предупреждение в журнал ошибок, указывая этих пользователей.
Если исходное заявление указывает опцию FAILED_LOGIN_ATTEMPTS или PASSWORD_LOCK_TIME, в записанном в двоичный журнал заявлении эта опция также будет указана.
ALTER USER с пунктами, поддерживающими многофакторную аутентификацию (MFA), записываются в двоичный журнал за исключением ALTER
USER .user factor INITIATE
REGISTRATION
Заявления
ALTER USERзаписываются в двоичный журнал какuser factorFINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'auth_string'ALTER USER;userMODIFYfactorIDENTIFIED WITH authentication_webauthn ASwebauthn_hash_stringВ контексте репликации пользователю репликации требуется привилегия
PASSWORDLESS_USER_ADMINдля выполнения операцийALTER USER ... MODIFYс учетными записями, настроенными для аутентификации без пароля, используя плагинauthentication_webauthn.
© 2025 Oracle
Licensed under the GPLv2 License.