Возможно, вы уже знаете что в MySQL можно установить срок действия паролей.
Не всегда очевидно, когда истекает срок действия пароля. И большую часть времени, если вы не уделите много внимания, вы получите что-то вроде этого:
ERROR 1820 (HY000): You must reset your password using
ALTER USER statement before executing this statement.
Позвольте нам поделиться с вами небольшим запросом, который проверяет, как долго ваш пароль остается в силе в случае, если он был создан с задержкой истечения срока действия или если глобальная переменная default_password_lifetime установлена на сервере (с MySQL 5.7.4 до 5.7.10 было установлено на 360 по умолчанию)!
select user, password_last_changed, concat( cast( IFNULL(password_lifetime, @@default_password_lifetime) as signed) + cast(datediff(password_last_changed, now()) as signed), " days") expires_in from mysql.user where cast( IFNULL(password_lifetime, @@default_password_lifetime) as signed) + cast(datediff(password_last_changed, now()) as signed) >= 0 and user not like 'mysql.%';
Давайте посмотрим на результат, когда default_password_lifetime установлен на 0 (фактическое значение по умолчанию):
+-------+-----------------------+------------+ | user | password_last_changed | expires_in | +-------+-----------------------+------------+ | test | 2019-05-16 12:34:11 | 2 days | | test2 | 2019-05-10 15:09:12 | 4 days | +-------+-----------------------+------------+
Теперь давайте изменим эту глобальную переменную:
mysql> set global default_password_lifetime=20;
+-------+-----------------------+------------+ | user | password_last_changed | expires_in | +-------+-----------------------+------------+ | fred | 2019-05-12 18:23:54 | 16 days | | test | 2019-05-16 12:34:11 | 2 days | | test2 | 2019-05-10 12:09:12 | 4 days | +-------+-----------------------+------------+
Это был легкий полезный запрос дня.