如何在MySQL 8.0中设置密码过期策略以提升安全性

浅丽吖_8955

浅丽吖_8955

2026-11-01

347人浏览

原创

default_password_lifetime仅影响新用户,老用户需用ALTER USER显式设置;密码重用限制需同时配置password_history和password_reuse_interval,并依赖validate_password插件及ALTER USER改密才生效。

如何在mysql 8.0中设置密码过期策略以提升安全性

直接设 default_password_lifetime 不会让老用户过期,必须用 ALTER USER 逐个设置;密码重用限制(password_history 和 password_reuse_interval)也只对启用后首次改密生效,且依赖 validate_password 插件。

为什么改了 default_password_lifetime 却没效果

这个变量只是新用户的“出厂设置”,不影响已有账号。比如你执行 SET PERSIST default_password_lifetime = 90,之后用 CREATE USER 创建的账号才默认 90 天过期;但 'olduser'@'%' 的 password_lifetime 字段仍为 NULL 或旧值,查 mysql.user 表看到全是 NULL 是正常现象,不是配置失败。

常见误操作包括:

  • 在生产环境用 SET GLOBAL 设置,MySQL 重启后失效
  • 以为设成 0 就等于“关闭策略”,其实它只表示“新用户默认永不过期”
  • 把 default_password_lifetime 当全局开关,忽略了已有用户必须显式覆盖

如何真正让指定用户密码过期

只有 ALTER USER 能触发真实校验逻辑,UPDATE mysql.user 直接改 password_expired 字段完全无效——该字段是只读快照,不驱动行为。

实操命令示例:

  • 立即过期:ALTER USER 'dev'@'%' PASSWORD EXPIRE;
  • 90 天后过期:ALTER USER 'app_rw'@'10.%.%.%' PASSWORD EXPIRE INTERVAL 90 DAY;
  • 永不过期(适合服务账号):ALTER USER 'svc_backup'@'localhost' PASSWORD EXPIRE NEVER;
  • 继承全局设置:ALTER USER 'admin'@'%' PASSWORD EXPIRE DEFAULT;(注意:不是“不过期”,而是取 @@default_password_lifetime 值)

验证是否生效:用该用户登录后执行 SELECT 1;,若报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.,才算真正起效。

怎么防止用户“换汤不换药”重用旧密码

password_history 和 password_reuse_interval 必须同时设置,且仅在 ALTER USER ... IDENTIFIED BY 改密时校验——SET PASSWORD 已弃用,不触发检查。

MySQL8 CRM Schema Design Expert
MySQL8 CRM Schema Design Expert

面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。

下载

关键前提:

  • MySQL 版本 ≥ 8.0.19
  • validate_password 插件/组件已加载(SHOW VARIABLES LIKE 'validate_password%'; 可确认)
  • 必须用 SET PERSIST 设置(推荐),而非 SET GLOBAL(重启失效)

例如:

SET PERSIST password_history = 5;
SET PERSIST password_reuse_interval = 365;

设置后,用户第 6 次改密不能选最近 5 次密码;哪怕某密码不在最近 5 次里,365 天内也不准重用。注意:这两个参数对设置前的历史密码不追溯,只从第一次用 ALTER USER ... IDENTIFIED BY 改密开始计数。

容易被忽略的兼容性与权限细节

很多故障源于版本和权限错配:

  • password_expiration_warning_days 是 8.0.24+ 才支持的变量,低版本设了会静默忽略
  • 用户若有 ALTER USER 权限,登录后可跳过 ERROR 1820 强制改密流程
  • caching_sha2_password 认证插件默认启用,但旧客户端可能连不上,别急着降级,优先用 ALTER USER ... IDENTIFIED WITH caching_sha2_password BY 显式升级
  • 所有策略都依赖 SYSTEM_VARIABLES_ADMIN 权限才能 SET PERSIST,普通 DBA 账号通常没有,得找更高权限账号操作

最常漏掉的一点:default_password_lifetime、password_history、password_reuse_interval 三者要配合使用,单设任何一个都无法闭环防住弱管理习惯——过期不重用,重用不限期,限期不强制,全得靠组合。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4683

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

971

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1229

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6681

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3403

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6640

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

9181

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1250

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1092

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 193人学习