写在前面
MySQL 5.7版本于2015年10月份左右 GA,至今已经2年多了。和部分DBA朋友交流,很多公司已经开始在线上使用5.7版本。我们今年计划将公司数据库从5.6进行升级到5.7 版本。本系列基于版本5.7.20来讲述MySQL的新特性,同时也建议大家跟踪官方blog和文档,以尽快知悉其新的变化。
一 安全性
MySQL 5.7 的目标是成为发布以来最安全的 MySQL 服务器,其在 SSL/TLS 和全面安全开发方面有一些重要的改变。
1.1 5.7版本的用户表mysql.user要求plugin字段非空,且默认值是mysql_native_password,并且不再支持mysql_old_password。
1.2 增加密码过期功能,dba可以设置任何用户的密码过期时间,具体详见官方文档《密码过期策略》
设置 用户的过期时间为 90天
ALTER USER yangyi@'127.0.0.1' PASSWORD EXPIRE INTERVAL 90 DAY;
设置 用户密码永远不过期
ALTER USER yangyi@'127.0.0.1' PASSWORD EXPIRE NEVER;
可能大家都有如果业务系统的账号某一天突然过期了,业务受到影响 怎么办? 别担心那么可以设置密码永不过期。
default_password_lifetime=0
1.3 DBA可以通过对用户加锁/ 解锁进一步控制其访问db 。
例子
mysql> alter user yang@'%' account lock;
Query OK, 0 rows affected (0.00 sec)
root@rac4:/srv/my3306/data# >mysql -uyang -h127.0.0.1 -p
Enter password:
ERROR 3118 (HY000): Access denied for user 'yang'@'localhost'. Account is locked.
mysql> alter user yang@'%' account unlock;
Query OK, 0 rows affected (0.00 sec)
1.4 SSL 特性 MySQL 5.7版本提供了更为简单SSL安全访问配置,并且默认连接就采用SSL的加密方式。细心的朋友在看官方文档的时候 会注意到 安装步骤中多了一安装SSL的步骤,具体关于SSL是什么,请参考 《图解SSL和加密》
shell> bin/mysql_ssl_rsa_setup # MySQL 5.7.6 and up
推荐两篇延伸阅读,关于SSL 特性我相信绝大多数数据库都没有开启,姜承尧文章中的测试案例显示弱开启SSL 性能开销在25% 左右。大家在尝试新的特性的时候 ,根据自己的业务做评估。《MySQL的SSL加密连接与性能开销》《SSL/TLS in MySQL 5.7》
1.5 使用更安全的初始化方式
逐步废弃mysql_install_db的安装方式使用initialize代替(mysql_install_db
a 只创建一个 root账号,并且生成一个临时的标记为过期密码
b 不创建其他账号
c 不创建test 数据库
特别强调与—initialize 不同 ,初始化的时候 使用参数
shell> bin/mysqld --initialize-insecure --user=mysql
则会生成一个无密码的root 账号。更详细的请移步 官方文档
二 参考文档
http://mysqlserverteam.com/whats-new-in-mysql-5-7-generally-available/
http://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html
https://www.linuxidc.com/Linux/2016-04/130034.htm
http://mysqlblog.fivefarmers.com/2015/04/09/ssltls-in-mysql-5-7/
领取专属 10元无门槛券
私享最新 技术干货