|
Spec-Zone .ru
спецификации, руководства, описания, API
|
MySQL 5.7 обеспечивает возможность истечения пароля, чтобы позволить администраторам базы данных истечь пароли учетной записи и потребовать, чтобы пользователи сбросили свой пароль. Этот раздел описывает, как истечение пароля работает.
Чтобы истечь пароль учетной записи, используйте ALTER
USER оператор. Например:
ALTER USER 'myuser'@'localhost' PASSWORD EXPIRE;
Этот оператор изменяет строку mysql.user таблица, связанная с именованной учетной
записью, устанавливая password_expired столбец к 'Y'.
Это не влияет ни на какие текущие соединения, которые учетная запись имеет открытый. Для каждого последующего
соединения, которое использует учетную запись, сервер или разъединяет клиент или обрабатывает клиент в "режиме песочницы,", в который сервер
разрешает клиенту только те операции, необходимые, чтобы сбросить пароль с истекшим сроком. (Меры, предпринятые
сервером, зависят от обеих настроек клиента и сервера.)
Если сервер разъединяет клиент, он возвращается ER_MUST_CHANGE_PASSWORD_LOGIN ошибка:
shell>mysql -u myuser -pPassword:******ERROR 1862 (HY000): Your password has expired. To log in you mustchange it using a client that supports expired passwords.
Если сервер помещает клиент в режим песочницы, эти операции разрешаются в пределах клиентского сеанса:
Клиент может сбросить пароль учетной записи с SET PASSWORD. Это изменяет строку mysql.user
таблица, связанная с текущим счетом, устанавливая password_expired столбец
к 'N'. После того, как пароль был сброшен, сервер восстанавливает
нормальный доступ для сеанса, так же как для последующих соединений, которые используют учетную запись.
Возможно "сбросить" пароль, устанавливая это в его текущую стоимость. Как хорошую политику, предпочтительно выбрать различный пароль.
Клиент может использовать SET операторы. Это могло бы быть необходимо до сброса пароля; например,
если пароль учетной записи использует хеширующий формат, который требует old_passwords системная переменная, которая будет установлена в
значение, отличающееся от его значения по умолчанию.
Для любой работы, не разрешенной в пределах сеанса, сервер возвращается ER_MUST_CHANGE_PASSWORD ошибка:
mysql> USE test;ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
Как упомянуто ранее, разъединяет ли сервер клиент пароля с истекшим сроком или помещает это в режим песочницы, зависит от комбинации настроек клиента и сервера. Следующее обсуждение описывает соответствующие настройки и как они взаимодействуют.
На стороне клиента данный клиент указывает, может ли она обработать режим песочницы для паролей с истекшим сроком. Для клиентов, которые пользуются клиентской библиотекой C, есть два способа сделать это:
Передайте MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS флаг
к mysql_options() до соединения:
arg = 1;result = mysql_options(mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &arg);
Передайте CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS флаг к
mysql_real_connect() во
время соединения:
mysql = mysql_real_connect(mysql, host, user, password, "test", port, unix_socket,CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS);
У другого MySQL Connectors есть их собственные соглашения для того, чтобы указать на готовность обработать режим песочницы. См. соответствующую документацию Соединителя.
На стороне сервера, если клиент указывает, что она может обработать истекшие пароли, сервер помещает это в режим песочницы.
Если клиент не указывает, что это может обработать истекшие пароли (или использует более старую версию
клиентской библиотеки, которая не может столь указать), действие сервера зависит от значения disconnect_on_expired_passwords системная переменная:
Если disconnect_on_expired_passwords включается (значение по умолчанию),
сервер разъединяет клиент с ER_MUST_CHANGE_PASSWORD_LOGIN ошибка.
Если disconnect_on_expired_passwords отключается, сервер помещает клиент в
режим песочницы.
Предыдущие настройки клиента и сервера применяются только для учетных записей с паролями с истекшим сроком. Если клиент соединяет использование пароля нес истекшим сроком, сервер обычно обрабатывает клиент.