Spec-Zone.ru › MySQL 8.4

15.7.1.10 Заявление SET PASSWORD

SET PASSWORD [FOR user] auth_option
    [REPLACE 'current_auth_string']
    [RETAIN CURRENT PASSWORD]

auth_option: {
    = 'auth_string'
  | TO RANDOM
}

Заявление SET PASSWORD присваивает пароль учетной записи пользователя MySQL. Пароль может быть явно указан в заявлении или сгенерирован случайным образом MySQL. Заявление также может содержать пункт проверки пароля, который указывает текущий пароль учетной записи для замены, и пункт управления наличием у учетной записи дополнительного пароля. 'auth_string' и 'current_auth_string' представляют собой открытый (незашифрованный) пароль.

Примечание

Вместо использования SET PASSWORD для присвоения паролей, ALTER USER является предпочтительным заявлением для изменения учетной записи, включая присвоение паролей. Например:

ALTER USER user IDENTIFIED BY 'auth_string';
Примечание

Пункты для генерации случайного пароля, проверки пароля и дополнительных паролей применяются только к учетным записям, которые используют плагин аутентификации, хранящий учетные данные внутри MySQL. Для учетных записей, использующих плагин, который выполняет аутентификацию по системе учетных данных, внешней по отношению к MySQL, управление паролями должно осуществляться внешне в отношении этой системы. Дополнительную информацию о хранении внутренних учетных данных см. в разделе 8.2.15, “Управление паролями”.

Пункт REPLACE 'current_auth_string' выполняет проверку пароля. При его наличии:

  • REPLACE указывает текущий пароль учетной записи для замены в виде открытого (незашифрованного) текста.

  • Этот пункт должен быть указан, если для изменения пароля учетной записи необходимо указать текущий пароль для проверки того, что пользователь, пытающийся внести изменения, действительно знает текущий пароль.

  • Этот пункт является необязательным, если для изменения пароля учетной записи можно, но не обязательно, указывать текущий пароль.

  • Заявление завершается ошибкой, если этот пункт указан, но не соответствует текущему паролю, даже если этот пункт является необязательным.

  • REPLACE можно указать только при изменении пароля учетной записи для текущего пользователя.

Дополнительную информацию о проверке пароля путем указания текущего пароля см. в разделе 8.2.15, “Управление паролями”.

Пункт RETAIN CURRENT PASSWORD реализует возможность двойного пароля. При его наличии:

  • RETAIN CURRENT PASSWORD сохраняет текущий пароль учетной записи в качестве дополнительного пароля, заменяя любой существующий дополнительный пароль. Новый пароль становится основным, но клиенты могут использовать учетную запись для подключения к серверу, используя основной или дополнительный пароль. (Исключение: если новый пароль, указанный в заявлении SET PASSWORD, пустой, дополнительный пароль также становится пустым, даже если RETAIN CURRENT PASSWORD указан.)

  • Если вы укажете RETAIN CURRENT PASSWORD для учетной записи с пустым основным паролем, заявление завершится ошибкой.

  • Если у учетной записи есть дополнительный пароль, и вы измените ее основной пароль, не указав RETAIN CURRENT PASSWORD, дополнительный пароль останется неизменным.

Дополнительную информацию об использовании двойных паролей см. в разделе 8.2.15, “Управление паролями”.

SET PASSWORD допускает такие auth_option синтаксические конструкции:

  • = 'auth_string'

    Присваивает учетной записи заданный литеранльный пароль.

  • TO RANDOM

    Присваивает учетной записи пароль, сгенерированный случайным образом MySQL. Заявление также возвращает открытый пароль в наборе результатов, чтобы сделать его доступным для пользователя или приложения, выполняющего заявление.

    Подробности о наборе результатов и характеристиках случайно сгенерированных паролей см. в Генерации случайных паролей.

Важно

В некоторых случаях, SET PASSWORD может быть записан в журналы сервера или на стороне клиента в файле истории, таком как ~/.mysql_history, что означает, что открытые пароли могут быть прочитаны любым лицом, имеющим доступ к этой информации. Информацию о ситуациях, в которых это происходит для журналов сервера, и о способах управления этим, см. в разделе 8.1.2.3, “Пароли и протоколирование”. Аналогичную информацию о протоколировании на стороне клиента см. в разделе 6.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, имя учетной записи использует формат, описанный в разделе 8.2.4, “Указание имен учетных записей”. Например:

SET PASSWORD FOR 'bob'@'%.example.org' = 'auth_string';

Часть имени учетной записи, относящаяся к имени хоста, если она опущена, по умолчанию равна '%'.

SET PASSWORD интерпретирует строку как строку открытого текста, передает ее связанному с учетной записью плагину аутентификации и сохраняет результат, возвращенный плагином, в строке учетной записи в таблице системы mysql.user. (Плагину предоставляется возможность хешировать значение в ожидаемый формат шифрования. Плагин может использовать значение в указанном виде, в этом случае хеширование не происходит.)

Установка пароля для указанной учетной записи (с помощью пункта FOR) требует привилегии UPDATE для схемы системы mysql. Установка пароля для себя (для учетной записи, отличной от анонимной, без пункта FOR) не требует особых привилегий.

Заявления, изменяющие дополнительные пароли, требуют следующих привилегий:

  • Привилегия APPLICATION_PASSWORD_ADMIN требуется для использования пункта RETAIN CURRENT PASSWORD для заявлений SET PASSWORD, которые применяются к вашей собственной учетной записи. Привилегия требуется для управления вашим собственным дополнительным паролем, так как большинство пользователей нуждаются только в одном пароле.

  • Если учетной записи разрешено управлять дополнительными паролями для всех учетных записей, ей следует предоставить привилегию CREATE USER, а не APPLICATION_PASSWORD_ADMIN.

Когда переменная системы read_only включена, SET PASSWORD требует привилегии CONNECTION_ADMIN (или устаревшей привилегии SUPER), помимо других необходимых привилегий.

Дополнительную информацию об установке паролей и плагинах аутентификации см. в разделе 8.2.14, “Назначение паролей учетных записей” и разделе 8.2.17, “Подключаемая аутентификация”.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/set-password.html

Spec-Zone.ru

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