6.2.12 Обработка истекших паролей на сервере
MySQL предоставляет возможность истечения срока действия паролей, что позволяет администраторам базы данных потребовать от пользователей сброса паролей. Пароли могут истекать вручную или на основе политики автоматического истечения срока действия (см. раздел 6.2.11 «Управление паролями»).
Оператор 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. После этого сервер восстанавливает нормальный доступ для сеанса, а также для последующих подключений, использующих данную учетную запись.ПримечаниеХотя возможно “сбросить” истекший пароль, установив его текущее значение, предпочтительнее выбрать другой пароль.
Клиент может использовать оператор
SET, что полезно до MySQL 5.7.6, еслиSET PASSWORDнеобходимо использовать вместоALTER USER, и если учетная запись использует плагин аутентификации, для которого системную переменнуюold_passwordsнеобходимо сначала установить в значение, отличное от стандартного, для выполнения хеширования паролей определённым способом.
Для любой операции, не разрешенной в сеансе, сервер возвращает ошибку:
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перед подключением:my_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 Connectors имеют собственные соглашения для указания готовности обработки режима песочницы. См. документацию по интересующему вас Connector.
Со стороны сервера, если клиент указывает, что может обрабатывать истекшие пароли, сервер помещает его в режим песочницы.
Если клиент не указывает, что может обрабатывать истекшие пароли (или использует более старую версию библиотеки клиента, которая не может это указать), действие сервера зависит от значения системной переменной disconnect_on_expired_password:
Если
disconnect_on_expired_passwordвключён (по умолчанию), сервер отключает клиента с ошибкой.Если
disconnect_on_expired_passwordотключён, сервер помещает клиента в режим песочницы.
© 2025 Oracle
Licensed under the GPLv2 License.