直接查mysql.user表即可获取密码最后修改时间,password_last_changed是唯一可靠时间戳;若password_lifetime为NULL,则需结合全局变量default_password_lifetime推算到期日。

直接查mysql.user表就能看到密码最后修改时间
MySQL 5.7 中没有现成的“到期时间”字段,password_last_changed 是唯一可靠的时间戳来源。它记录的是该用户最后一次成功修改密码的精确时间(含时分秒),所有后续计算都基于它。
执行以下语句即可获取关键信息:
SELECT user, host, password_last_changed, password_lifetime FROM mysql.user WHERE user = 'your_user';
注意:password_lifetime 字段在 MySQL 5.7.6+ 才存在;若为 NULL,说明该用户未显式设置过有效期,将继承全局配置 default_password_lifetime。
password_lifetime 为 NULL 时怎么算到期日
当 password_lifetime 是 NULL,必须查全局变量才能推算实际到期日:
SHOW VARIABLES LIKE 'default_password_lifetime';
返回值为 0 表示永不过期;为正整数(如 90)则表示从 password_last_changed 开始往后推这么多天。
🎯 HR面试评价助手(Word版格式) 生成可直接复制到Word文档的标准格式HR面试评价 【使用方式】 1. 发送口令:HR面试评价 2. 粘贴JD文字 3. 上传简历文档 4. 上传面试记录(可选) 5. 复制生成的评价到Word 【输出特点】 - 纯文本格式,可直接粘贴到Word - 层次清晰,标题加粗...
可合并查询(兼容 NULL 和非 NULL):
SELECT user, host, password_last_changed, COALESCE(password_lifetime, @@default_password_lifetime) AS effective_lifetime, DATE_ADD(password_last_changed, INTERVAL COALESCE(password_lifetime, @@default_password_lifetime) DAY) AS expires_at FROM mysql.user WHERE user = 'your_user';
- 如果
effective_lifetime是0,expires_at会是NULL(MySQL 不支持 0 天加法),此时应理解为“永不过期” - 若
password_last_changed为NULL(极少见,多见于旧账号迁移),说明该密码从未被明确修改过,无法准确计算到期日
别信 PASSWORD_EXPIRE_TIME() 函数
网上有些教程提到用 PASSWORD_EXPIRE_TIME() 函数,但它在 MySQL 5.7 中并不存在 —— 这是误传或混淆了其他数据库/版本的行为。尝试调用会报错:
ERROR 1305 (42000): FUNCTION PASSWORD_EXPIRE_TIME does not exist
真正可用的只有:
-
SHOW CREATE USER 'xxx':看语句里是否含PASSWORD EXPIRE INTERVAL N DAY或NEVER -
SELECT ... FROM mysql.user:查password_lifetime和password_last_changed -
SHOW VARIABLES:查全局default_password_lifetime
查不到 password_last_changed?可能是权限或版本问题
如果你执行 SELECT 时发现 password_last_changed 列为空或报错 Unknown column,先确认两点:
- 你登录的账户是否有访问
mysql系统库的权限(至少SELECTonmysql.user) - MySQL 版本是否 ≥ 5.7.6(该字段首次引入);低于此版本只能靠
SHOW CREATE USER+ 推断
另外,某些云数据库(如阿里云 RDS)可能隐藏或限制对 mysql.user 的直接查询,此时必须通过控制台参数页或 DAS 工具查看 default_password_lifetime 设置。


















