Spec-Zone.ru › MySQL 5.7

6.2.11 Управление паролями

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

  • Внутреннее и внешнее хранение учетных данных

  • Политика истечения срока действия паролей

Внутреннее и внешнее хранение учетных данных

Некоторые плагины аутентификации хранят учетные данные учетных записей внутри MySQL в таблице системы mysql.user:

  • mysql_native_password

  • sha256_password

Обсуждение в этом разделе относится к таким плагинам аутентификации, поскольку возможности управления паролями, описанные здесь, основаны на внутреннем хранении учетных данных, выполняемом самим MySQL.

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

Сведения об отдельных плагинах аутентификации см. в разделе 6.4.1, «Плагины аутентификации».

Политика истечения срока действия паролей

Для истечения срока действия пароля учетной записи вручную используйте оператор ALTER USER:

ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;

Эта операция помечает пароль как истекший в соответствующей строке таблицы системы mysql.user.

Автоматическое истечение срока действия пароля в соответствии с политикой основано на возрасте пароля, который для заданной учетной записи определяется со времени и даты последнего изменения пароля. Таблица системы mysql.user указывает для каждой учетной записи, когда пароль был изменен последний раз, и сервер автоматически обрабатывает пароль как истекший во время подключения клиента, если его возраст превышает разрешенный срок действия. Это работает без явного ручного истечения срока действия пароля.

Для установления глобальной политики автоматического истечения срока действия пароля используйте системную переменную default_password_lifetime. Ее значение по умолчанию равно 0, что отключает автоматическое истечение срока действия пароля. Если значение default_password_lifetime является положительным целым числом N, это указывает на разрешенный срок действия пароля, такой, что пароли должны меняться каждые N дней.

Примечание

До версии 5.7.11 значение по умолчанию default_password_lifetime составляет 360 (пароли необходимо изменять примерно один раз в год). Для таких версий имейте в виду, что если вы не внесете никаких изменений в переменную default_password_lifetime или в учетные записи отдельных пользователей, каждый пароль пользователя истекает через 360 дней, и учетная запись начинает работать в ограниченном режиме. Клиенты, подключающиеся к серверу с использованием этой учетной записи, получат ошибку, указывающую на то, что пароль необходимо изменить: ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Однако это легко упустить из виду для клиентов, которые автоматически подключаются к серверу, например, подключения, выполненные из сценариев. Чтобы избежать того, чтобы такие клиенты внезапно перестали работать из-за истечения срока действия пароля, убедитесь, что вы изменяете настройки истечения срока действия пароля для этих клиентов, например, так:

ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER

В качестве альтернативы установите переменную default_password_lifetime в значение 0, тем самым отключив автоматическое истечение срока действия пароля для всех пользователей.

Примеры:

  • Для установления глобальной политики, согласно которой срок действия паролей составляет примерно шесть месяцев, запустите сервер с этими строками в файле сервера my.cnf:

    [mysqld]
    default_password_lifetime=180
    
  • Для установления глобальной политики, согласно которой пароли никогда не истекают, установите default_password_lifetime в значение 0:

    [mysqld]
    default_password_lifetime=0
    
  • default_password_lifetime также может быть изменено во время выполнения:

    SET GLOBAL default_password_lifetime = 180;
    SET GLOBAL default_password_lifetime = 0;
    

Глобальная политика истечения срока действия пароля применяется ко всем учетным записям, которые не были настроены на ее переопределение. Для установления политики для отдельных учетных записей используйте параметры PASSWORD EXPIRE операторов CREATE USER и ALTER USER. См. раздел 13.7.1.2, «Оператор CREATE USER» и раздел 13.7.1.1, «Оператор ALTER USER».

Пример операторов для отдельных учетных записей:

  • Требовать изменения пароля каждые 90 дней:

    CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
    

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

  • Отключить истечение срока действия пароля:

    CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
    

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

  • Подчиняться глобальной политике истечения срока действия для всех учетных записей, указанных в операторе:

    CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
    

При успешном подключении клиента сервер определяет, истек ли срок действия пароля учетной записи:

  • Сервер проверяет, не истек ли пароль вручную.

  • В противном случае сервер проверяет, не превысил ли возраст пароля разрешенный срок действия в соответствии с политикой автоматического истечения срока действия пароля. Если это так, сервер считает пароль истекшим.

Если срок действия пароля истек (вручную или автоматически), сервер либо отключает клиента, либо ограничивает операции, разрешенные для него (см. раздел 6.2.12, «Обработка сервером истекших паролей»). Операции, выполняемые клиентом с ограниченными правами, приводят к ошибке, пока пользователь не установит новый пароль учетной записи:

mysql> SELECT 1;
ERROR 1820 (HY000): You must reset your password using ALTER USER
statement before executing this statement.

mysql> ALTER USER USER() IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

Этот ограниченный режим работы позволяет использовать операторы SET, что полезно до MySQL 5.7.6, если необходимо использовать SET PASSWORD вместо ALTER USER, и пароль учетной записи имеет формат хеширования, требующий установки old_passwords в значение, отличное от значения по умолчанию.

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

Примечание

Хотя можно “сбросить” истекший пароль, установив его текущее значение, предпочтительнее по соображениям политики выбрать другой пароль.

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

Spec-Zone.ru

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