MySQL8的密码管理

2025-01-09 17:16:07 242

MySQL8的密码管理

欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。


MySQL中记录使用过的历史密码,目前包含如下密码管理功能:

(1)密码过期:需要定期修改密码。

(2)密码重用机制:不允许使用旧密码。

(3)密码强度评估:要求使用高强度的密码。

MySQL密码管理功能只针对使用基于MySQL授权插件的账号,这些插件有mysql_native_password、sha256_password和caching_sha2_password。

1. 密码过期策略
  • 在MySQL中,数据库管理员可以手动设置账号密码过期,也可以建立一个自动密码过期的策略。

  • 过期策略可以是全局的,也可以为每个账号设置单独的过期策略。

手动设置立马过期

手动设置账号密码过期,可使用如下语句:

ALTER USER user PASSWORD EXPIRE;

示例:将用户zhang3账号的密码设置为过期,SQL语句如下:

ALTER USER 'zhang3'@'localhost' PASSWORD EXPIRE;

该语句将用户zhang3的密码设置为过期,zhang3用户仍然可以登录进入数据库,但无法进行查询。密码过期后,只有重新设置了新密码,才能正常使用。

image-20250103141417940image.png

手动设置指定时间过期方式1:全局

如果密码使用的时间大于允许的时间,服务器会自动设置为过期,不需要手动设置。

MySQL使用 default_password_lifetime 系统变量建立全局密码过期策略。

  • 它的默认值是0,表示禁用自动密码过期。

  • 它允许的值是正整数N,表示允许的密码生存期。密码必须每隔N天进行修改。

两种实现方式分别如图所示:

  • 方式①:使用SQL语句更改该变量的值并持久化

SET PERSIST default_password_lifetime = 180; # 建立全局策略,设置密码每隔180天过期

  • 方式②:配置文件my.cnf中进行维护

[mysqld]
default_password_lifetime=180 #建立全局策略,设置密码每隔180天过期

手动设置指定时间过期方式2:单独设置

每个账号既可延用全局密码过期策略,也可单独设置策略。在 CREATE USERALTER USER 语句上加入 PASSWORD EXPIRE 选项可实现单独设置策略。下面是一些语句示例。

#设置zhang3账号密码每90天过期:
CREATE USER 'zhang3'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'zhang3'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;


#设置密码永不过期:
CREATE USER 'zhang3'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'zhang3'@'localhost' PASSWORD EXPIRE NEVER;


#延用全局密码过期策略:
CREATE USER 'zhang3'@'localhost' PASSWORD EXPIRE DEFAULT;
ALTER USER 'zhang3'@'localhost' PASSWORD EXPIRE DEFAULT;

2. 密码重用策略

MySQL限制使用已用过的密码。重用限制策略基于密码更改的数量使用时间。重用策略可以是全局的,也可以为每个账号设置单独的策略

  • 账号的历史密码包含过去该账号所使用的密码。MySQL基于以下规则来限制密码重用:

    • 如果账号的密码限制基于密码更改的数量,那么新密码不能从最近限制的密码数量中选择。例如,如果密码更改的最小值是3,那么新密码不能与最近3个密码中任何一个相同。

    • 如果账号的密码限制基于时间,那么新密码不能从规定时间内选择。例如,如果密码重用周期为60天,那么新密码不能从最近60天内使用的密码中选择。

  • MySQL使用password_history和password_reuse_interval系统变量设置密码重用策略。

    • password_history: 规定密码重用的数量。

    • password_reuse_interval: 规定密码重用的周期

  • 这两个值可在服务器的配置文件中进行维护,也可在运行期间使用SQL语句更改该变量的值并持久化。

手动设置密码重用方式1:全局

  • 方式①:使用SQL

SET PERSIST password_history = 6; #设置不能选择最近使用过的6个密码

SET PERSIST password_reuse_interval = 365; #设置不能选择最近一年内的密码

  • 方式②:my.cnf配置文件

[mysqld]
password_history=6
password_reuse_interval=365

手动设置密码重用方式2:单独设置

每个账号可以延用全局密码重用策略,也可以单独设置策略。这两个选项可以单独使用,也可以结合在一起使用。下面是一些示例。

#不能使用最近5个密码:
CREATE USER 'zhang3'@'localhost' PASSWORD HISTORY 5;

ALTER USER 'zhang3'@'localhost' PASSWORD HISTORY 5;


#不能使用最近365天内的密码:
CREATE USER 'zhang3'@'localhost' PASSWORD REUSE INTERVAL 365 DAY;

ALTER USER 'zhang3'@'localhost' PASSWORD REUSE INTERVAL 365 DAY;


#既不能使用最近5个密码,也不能使用365天内的密码
CREATE USER 'zhang3'@'localhost'
PASSWORD HISTORY 5
PASSWORD REUSE INTERVAL 365 DAY;

ALTER USER 'zhang3'@'localhost'
PASSWORD HISTORY 5
PASSWORD REUSE INTERVAL 365 DAY;


蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,蓝队云期待与你一起探索。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: