Spec-Zone.ru › MySQL 5.7

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('auth_string') устарел в MySQL 5.7 и удален в MySQL 8.0.

  • Синтаксис SET PASSWORD ... = 'auth_string' не устарел, но ALTER USER является предпочтительным выражением для изменения учетных записей, включая присвоение паролей. Например:

    ALTER USER user IDENTIFIED BY 'auth_string';
    
Важно

В некоторых случаях SET PASSWORD может быть записан в журналы сервера или на стороне клиента в файле истории, таком как ~/.mysql_history, что означает, что пароли в открытом виде могут быть прочитаны любым пользователем, имеющим доступ к этой информации. Информацию о ситуациях, в которых это происходит для журналов сервера, и о том, как это контролировать, см. в Разделе 6.1.2.3 «Пароли и ведение журналов». Аналогичную информацию о ведении журналов на стороне клиента см. в Разделе 4.5.1.3 «Ведение журналов клиента mysql».

SET PASSWORD может использоваться с или без клаузы FOR, которая явно называет учетную запись пользователя:

  • С клаузой FOR user выражение устанавливает пароль для указанной учетной записи, которая должна существовать:

    SET PASSWORD FOR 'jeffrey'@'localhost' = 'auth_string';
    
  • Без клаузы FOR user выражение устанавливает пароль для текущего пользователя:

    SET PASSWORD = 'auth_string';
    

    Любой клиент, подключающийся к серверу с использованием неанонимной учетной записи, может изменить пароль этой учетной записи. (В частности, вы можете изменить свой собственный пароль.) Чтобы узнать, под какой учетной записью сервер вас авторизовал, вызовите функцию CURRENT_USER():

    SELECT CURRENT_USER();
    

Если указана клауза FOR user, имя учетной записи использует формат, описанный в Разделе 6.2.4 «Указание имен учетных записей». Например:

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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/set-password.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API