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 -p
Password:******
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
отключается, сервер помещает клиент в
режим песочницы.
Предыдущие настройки клиента и сервера применяются только для учетных записей с паролями с истекшим сроком. Если клиент соединяет использование пароля нес истекшим сроком, сервер обычно обрабатывает клиент.