这几年被拉去处理过不少MySQL安全问题,坦白讲,真正让人头疼的从来不是数据库本身多脆弱,而是账号太乱、端口太开放、备份不加密、日志不归档这类基础问题。我整理了一份MySQL安全加固的十个硬核操作清单,全部来自生产环境的实战,不是让你“看完知道有这回事”,而是每条都给了能直接执行的命令、参数和踩坑提醒。
这篇内容适合两类人:一是刚接手一套线上MySQL,想做一次安全基线整理的DBA或运维;二是后端开发想了解数据库加固到底在加什么,避免写出一个权限比DBA还大的应用账号。按顺序操作,绝大多数常规安全隐患都能被挡住,而且不会影响正常业务。
1. 账号与口令收敛:先把最容易撞开的门锁换掉
1.1 第一招:密码复杂度校验必须在建号时就生效
很多人以为安全加固是给现有账号换个强密码就完事,但真正的问题是“下一个新账号”有没有被规则约束。MySQL 8.0默认不会强制密码复杂度,业务方自己建号时写个123456也能通过,这种后门防不住。
MySQL 8.0和5.7的安装方式不一样,这点非常容易踩坑:
- MySQL 5.7:用插件机制,
INSTALL PLUGIN validate_password SONAME 'validate_password.so'; - MySQL 8.0:用组件机制,
INSTALL COMPONENT 'file://component_validate_password';
装完以后先看策略参数:
sql复制SHOW VARIABLES LIKE 'validate_password%';
我推荐生产环境至少是这个档位:
ini复制validate_password.policy = STRONG
validate_password.length = 12
validate_password.mixed_case_count = 1
validate_password.number_count = 1
validate_password.special_char_count = 1
LOW策略只检查长度,MEDIUM会检查数字、大小写和特殊字符,STRONG还会检查字典文件。既然要上加固,就别只开个LOW欺骗自己。
这里有一个很多人不知道的坑:安装组件后,**已
