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 sha2_password
BY 'password';
Пример: Как в предыдущем примере, но дополнительно укажите текущий пароль как значение нешифрованного текста, чтобы удовлетворить любое требование учетной записи, согласно которому пользователь, производящий изменение, знает этот пароль:
ALTER USER 'jeffrey'@'localhost'
IDENTIFIED WITH sha2_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 caching_sha2_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 9.2 поддерживает комментарии и атрибуты пользователя, как описано в разделе 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.