年底了,你的数据库是不是该巡检了?一般巡检都会关心密码安全问题,比如密码复杂度设置,是否有定期修改等。特别是进行等保评测时,评测机构会要求具备密码安全策略。其实 MySQL 系统本身可以设置密码复杂度及自动过期策略的,可能比较少用,大多数同学并未详细去了解。本篇文章我们一起来学习下如何设置数据库账号密码复杂度及自动过期策略。
1.密码复杂度策略设置
MySQL 系统自带有 validate_password 插件,此插件可以验证密码强度,未达到规定强度的密码则不允许被设置。MySQL 5.7 及 8.0 版本默认情况下貌似都不启用该插件,这也使得我们可以随意设置密码,比如设置为 123、123456等。如果我们想从根源上规范密码强度,可以启用该插件,下面一起来看下如何通过此插件来设置密码复杂度策略。
1)查看是否已安装此插件
进入 MySQL 命令行,通过 show plugins 或者查看 validate_password 相关参数可以判断是否已安装此插件。若没有相关参数则代表未安装此插件
1、validate_password_policy 代表的密码策略,默认是MEDIUM 可配置的值有以下: 0 or LOW 仅需需符合密码长度(由参数validate_password_length指定) 1 or MEDIUM 满足LOW策略,同时还需满足至少有1个数字,小写字母,大写字母和特殊字符 2 or STRONG 满足MEDIUM策略,同时密码不能存在字典文件(dictionary file)中
# 新建用户设置密码
mysql>createuser'testuser'@'%' identified by'123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql>createuser'testuser'@'%' identified by'ab123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql>createuser'testuser'@'%' identified by'Ab@123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql>createuser'testuser'@'%' identified by'Bsdf@5467672';
Query OK, 0rows affected (0.01 sec)
更改密码
mysql>alteruser‘testuser’@‘%’ identified by‘dfgf3435’; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements mysql>alteruser‘testuser’@‘%’ identified by‘dBsdf@5467672’; Query OK, 0rows affected (0.01 sec)
# 通过 mysql.user 系统表查看数据库账号状态
mysql>selectuser,host,password_expired,password_lifetime,password_last_changed,account_locked from mysql.user;
+------------------+-----------+------------------+-------------------+-----------------------+----------------+|user| host | password_expired | password_lifetime | password_last_changed | account_locked |+------------------+-----------+------------------+-------------------+-----------------------+----------------+| expuser |%| N |NULL|2021-01-0514:30:30| N || root |%| N |NULL|2020-10-3014:45:43| N || testuser |%| N |NULL|2021-01-0417:22:37| N || mysql.infoschema | localhost | N |NULL|2020-10-3014:37:09| Y || mysql.session | localhost | N |NULL|2020-10-3014:37:09| Y || mysql.sys | localhost | N |NULL|2020-10-3014:37:09| Y || root | localhost | N |NULL|2020-10-3014:38:55| N |+------------------+-----------+------------------+-------------------+-----------------------+----------------+7rowsinset (0.01 sec)
mysql.user 系统表记录着每个账号的相关信息,当 password_expired 字段值为 Y 时,代表此密码已过期,使用过期密码仍可以登录,但不能进行任何操作,进行操作会提示:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 必须更改密码后才能进行正常操作。