13.7.1.7 Выражение SET PASSWORD
SET PASSWORD [FOR user] = password_option
password_option: {
'auth_string'
| PASSWORD('auth_string')
}
Выражение SET PASSWORD присваивает пароль учетной записи пользователя MySQL. ' представляет собой пароль в открытом виде (незашифрованный). auth_string'
Синтаксис
SET PASSWORD ... = PASSWORD('устарел в MySQL 5.7 и удален в MySQL 8.0.auth_string')-
Синтаксис
SET PASSWORD ... = 'не устарел, ноauth_string'ALTER USERявляется предпочтительным выражением для изменения учетных записей, включая присвоение паролей. Например:ALTER USER
userIDENTIFIED BY 'auth_string';
В некоторых случаях SET
PASSWORD может быть записан в журналы сервера или на стороне клиента в файле истории, таком как ~/.mysql_history, что означает, что пароли в открытом виде могут быть прочитаны любым пользователем, имеющим доступ к этой информации. Информацию о ситуациях, в которых это происходит для журналов сервера, и о том, как это контролировать, см. в Разделе 6.1.2.3 «Пароли и ведение журналов». Аналогичную информацию о ведении журналов на стороне клиента см. в Разделе 4.5.1.3 «Ведение журналов клиента mysql».
SET PASSWORD может использоваться с или без клаузы FOR, которая явно называет учетную запись пользователя:
-
С клаузой
FORвыражение устанавливает пароль для указанной учетной записи, которая должна существовать:userSET PASSWORD FOR 'jeffrey'@'localhost' = '
auth_string'; -
Без клаузы
FORвыражение устанавливает пароль для текущего пользователя:userSET PASSWORD = '
auth_string';Любой клиент, подключающийся к серверу с использованием неанонимной учетной записи, может изменить пароль этой учетной записи. (В частности, вы можете изменить свой собственный пароль.) Чтобы узнать, под какой учетной записью сервер вас авторизовал, вызовите функцию
CURRENT_USER():SELECT CURRENT_USER();
Если указана клауза FOR , имя учетной записи использует формат, описанный в Разделе 6.2.4 «Указание имен учетных записей». Например: user
SET PASSWORD FOR 'bob'@'%.example.org' = 'auth_string';
Часть имени учетной записи, относящаяся к хосту, если она опущена, по умолчанию равна '%'.
Установка пароля для указанной учетной записи (с клаузой FOR) требует привилегия UPDATE для системной базы данных mysql. Установка пароля для себя (для неанонимной учетной записи без клаузы FOR) не требует особых привилегий. Если переменная системы read_only включена, SET PASSWORD требует привилегия SUPER в дополнение к другим требуемым привилегиям.
Пароль можно указать следующими способами:
-
Используйте строку без
PASSWORD()SET PASSWORD FOR 'jeffrey'@'localhost' = '
password';SET PASSWORDинтерпретирует строку как строку в открытом виде, передает ее в плагин аутентификации, связанный с учетной записью, и сохраняет результат, возвращенный плагином, в строке учетной записи в таблице системыmysql.user. (Плагину предоставляется возможность хешировать значение в требуемый им формат шифрования. Плагин может использовать значение как указано, в этом случае хеширование не происходит.) -
Используйте функцию
PASSWORD()(устарела в MySQL 5.7)SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('password');Аргумент
PASSWORD()— это пароль в открытом виде (незашифрованный).PASSWORD()хеширует пароль и возвращает зашифрованную строку пароля для хранения в строке учетной записи в таблице системыmysql.user.Функция
PASSWORD()хеширует пароль, используя метод хеширования, определяемый значением системной переменнойold_passwords. Убедитесь, чтоold_passwordsимеет значение, соответствующее методу хеширования, ожидаемому плагином аутентификации, связанным с учетной записью. Например, если учетная запись использует плагинmysql_native_password, значениеold_passwordsдолжно быть 0:SET old_passwords = 0; SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('password');Если значение
old_passwordsотличается от значения, необходимого плагину аутентификации, значение хешированного пароля, возвращаемоеPASSWORD(), не может быть использовано плагином, и корректная аутентификация подключений клиентов не может произойти.
В следующей таблице показано для каждого метода хеширования пароля разрешенное значение old_passwords и плагины аутентификации, использующие метод хеширования.
| Метод хеширования пароля | Значение old_passwords | Плагин аутентификации |
|---|---|---|
| Родной метод хеширования MySQL 4.1 | 0 | mysql_native_password |
| Хеширование SHA-256 | 2 | sha256_password |
Дополнительную информацию об установке паролей и плагинах аутентификации см. в Разделе 6.2.10 «Назначение паролей учетных записей» и Разделе 6.2.13 «Подключаемая аутентификация».
© 2025 Oracle
Licensed under the GPLv2 License.