一、 密码强度管理
在5.7版本中,如果用户密码过于简单,可能会收到以下报错:
GRANT REPLICATION CLIENT ON *.*TO 'username'@'%' IDENTIFIED BY ‘xxxxxxxx’;
ERROR 1819 (HY000): Your password does notsatisfy the current policy requirements
这个报错与validate_password_policy参数的值有关。默认是1 :符合长度,且必须含有数字、大小写字母,特殊字符。
取值 | 含义 |
0 or LOW | Length |
1 or MEDIUM | Length; numeric, lowercase/uppercase, and special characters |
2 or STRONG | Length; numeric, lowercase/uppercase, and special characters; dictionary file |
如果不想密码很复杂,可以修改:
set global validate_password_policy=0;
GRANT REPLICATION CLIENT ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'xxxxxxxx';
Query OK, 0 rows affected, 1 warning (0.02sec)
更改密码最小长度为4
set global validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)
查看其他相关参数
SHOW VARIABLES LIKE 'validate_password%';
二、 密码过期策略
1. 5.6.6版本起
添加了password_expired功能,允许设置用户密码过期。
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE;
这个特性已经添加到mysql.user数据表,它的默认值是”N”,可以使用ALTER USER语句来修改。
一旦某个用户的这个选项设置为”Y”,那么这个用户还是可以登陆到MySQL服务器,但是在用户未设置新密码之前不能运行任何查询语句,否则会得到如下报错:
SHOW DATABASES;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
解除过期状态:用户或管理员重设密码
alter user mdba@localhost identified by 'Aisino123!';
flush privileges;
2. 5.7.4版本起
可以通过全局变量default_password_lifetime来设置全局的密码过期的策略
- 在5.7.4 ~ 5.7.10版本中,default_password_lifetime默认值是360
- 在5.7.11以后,mysqldefault_password_lifetime默认值是0
my.cnf配置如下:
[mysqld]
default_password_lifetime=90
在MySQL运行时可以使用超级权限修改此配置:
SET GLOBAL default_password_lifetime = 90;
还可以使用ALTER USER命令为每个用户单独设置特定的值,它会自动覆盖密码过期的全局策略(注意ALTER USER语句INTERVAL的单位是 天)
-- 设置'testuser'@'localhost'用户密码30天过期
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY;
-- 设置'testuser'@'localhost'用户密码不过期
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER;
-- 设置'testuser'@'localhost'用户使用全局密码过期策略
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE DEFAULT;
三、 用户锁定与解锁
5.7.8版开始,添加了锁定/解锁用户的新特性
ALTER USER 'furrywall'@'localhost' ACCOUNT LOCK;
ALTER USER 'furrywall'@'localhost' ACCOUNT UNLOCK;
-- 验证
select user,host,account_locked from mysql.user;