1、安全性
MySQL 5.7 的目标是成为发布以来最安全的 MySQL 服务器,其在 SSL/TLS 和全面安全开发方面有一些重要的改变。
mysql.user表结构升级
MySQL5.7用户表mysql.user的plugin字段不允许为空,默认值是mysql_native_password,而不是mysql_old_password,不再支持旧密码格式。
从旧版本升级,直接将原有的SQL导入到MySQL5.7,需要进行user表结构的升级:
shell> /usr/local/mysql/bin/mysql_upgrade -uroot -p
重启MySQL
mysql.user表中已经没有了password字段,取而代之的是“authentication_string”
# 修改密码(或者忘记密码的处理方式):
# 运行:
shell> mysqld_safe --skip-grant-tables &
# 如果此时不想被远程连接:
shell> mysqld_safe --skip-grant-tables --skip-networking &
# 更改密码:
mysql> update mysql.user set authentication_string=password('123AAAbbb2323#') where user='root' and Host = 'localhost';
mysql> flush privileges;
或者:
mysql> alter user 'root'@'localhost' identified by '123AAAbbb2323#';
mysql> flush privileges;
账号安全
用户长度最大为32字节,之前最大长度为16字节,并且CREATE USER 和 DROP USER 命令里实现了 IF [NOT] EXISTS 条件判断。
创建用户分2步:先通过create user 创建用户,再通过grant来授权。
# 先创建用户
mysql> CREATE USER 'dba'@'localhost' IDENTIFIED BY '123456';
# 或者
mysql> CREATE USER 'dba'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '123456';
# 或者
mysql> create user ‘test1’@’%’ identified with mysql_native_password as ‘23AE809DDACAF96AF0FD78ED04B6A265E05AA257’
# 再授权
mysql> grant select,insert,update,delete on *.* to dba@localhost;
直接使用grant命令创建用户将会报如下警告:
Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement.
密码过期策略
增加密码过期机制,过期后需要修改密码,否则可能会被禁用,或者进入沙箱模式。
为用户设置密码过期时间,一定时间以后,强制用户修改密码。可以直接在create user的时候设置,也可以alter user设置:
PASSWORD EXPIRE DEFAULT # 默认,过期时间受全局变量 default_password_lifetime 控制
PASSWORD EXPIRE NEVER #永不过期
PASSWORD EXPIRE INTERVAL N DAY #N天后过期
PASSWORD EXPIRE #过期
举例:
# 直接创建用户的时候设置 10天后过期:
mysql> create user dba@localhost identified by '123456' password expire interval 10 day;
# 对已有用户设置 永不过期:
mysql> alter user dba@localhost password expire never;
默认密码过期时间受变量default_password_lifetime控制,为0表示默认永不过期
mysql> set global default_password_lifetime=0;
Query OK, 0 rows affected (0.00 sec)
密码安全策略
为防止用户设置过简单的密码,mysql在5.6开始就已经支持了密码安全策略的插件。
开启密码安全策略,2种方法:
① 在配置文件里修改:
[mysqld]
plugin-load=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
② 在线修改
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
Query OK, 0 rows affected (0.01 sec)
开启安全策略的时候,不能为用户设置一个简单的密码:
mysql> grant all on *.* to dba@localhost identified by '123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
密码要求的强度手参数:validate_password_policy 的影响。validate_password_policy的值有:
0 or LOW:仅需需符合密码长度(由参数validate_password_length指定,默认为8)
1 or MEDIUM:满足LOW策略,同时还需满足至少有1个数字,小写字母,大写字母和特殊字符,默认。
2 or STRONG:满足MEDIUM策略,同时密码不能存在字典文件(dictionary file)中
相关参数:
validate_password_dictionary_file:在STRONG模式下还能设置字典文件,字典中存在的密码不得使用。可以通过该参数来设置字典文件。
validate_password_length:设置密码的最小长度,默认值为8。
validate_password_mixed_case_count: