Spec-Zone.ru › MySQL 8.4

8.2.16 Обработка истекших паролей сервером

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

Оператор ALTER USER позволяет настроить истечение паролей для учетных записей. Например:

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

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

Если сервер отключает клиента, он возвращает ошибку:

$> mysql -u myuser -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.

Если сервер ограничивает клиента режимом песочницы, в рамках сеанса клиента разрешены следующие операции:

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

    Примечание

    Хотя можно «сбросить» истекший пароль, установив его текущее значение, предпочтительнее выбрать другой пароль. Администраторы БД могут запретить повторное использование паролей, установив соответствующую политику повторного использования паролей. См. Политику повторного использования паролей.

Для любой операции, не разрешенной в рамках сеанса, сервер возвращает ошибку:

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

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

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

Для неинтерактивных вызовов клиента mysql (например, в пакетном режиме) сервер обычно отключает клиента, если пароль истек. Чтобы разрешить неинтерактивным вызовам mysql оставаться подключенными для изменения пароля (используя разрешенные в режиме песочницы операторы), добавьте опцию --connect-expired-password к команде mysql.

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

Примечание

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

С клиентской стороны, конкретный клиент указывает, может ли он обрабатывать режим песочницы для истекших паролей. Для клиентов, использующих C-клиентскую библиотеку, существуют два способа сделать это:

  • Передайте флаг MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS для подключения:

    bool arg = 1;
    mysql_options(mysql,
                  MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,
                  &arg);
    

    Этот метод используется в клиенте mysql, который позволяет использовать MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, если он вызывается интерактивно или с опцией --connect-expired-password.

  • Передайте флаг CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS для подключения:

    MYSQL mysql;
    mysql_init(&mysql);
    if (!mysql_real_connect(&mysql,
                            host, user, password, db,
                            port, unix_socket,
                            CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS))
    {
      ... handle error ...
    }
    

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

С серверной стороны, если клиент указывает, что может обрабатывать истекшие пароли, сервер переводит его в режим песочницы.

Если клиент не указывает, что может обрабатывать истекшие пароли (или использует более старую версию клиентской библиотеки, которая не может это указывать), действие сервера зависит от значения системной переменной disconnect_on_expired_password:

  • Если disconnect_on_expired_password включен (по умолчанию), сервер отключает клиента с ошибкой.

  • Если disconnect_on_expired_password отключен, сервер переводит клиента в режим песочницы.

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

Spec-Zone.ru

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