1. 数据库版本及运行要求
- 使用稳定的解决了已知漏洞的版本,如5.6.39或5.7.20 (更新 于2018.2)
- 以--skip-symbolic-links选项启动数据库:禁止在创建索引和创建表的时候,将索引文件和数据文件链接到其他文件。

2. 通用加固项
- 删除冗余数据库, 如test。
- 清除无用用户(没有用户名的用户)。
- 修改超级用户的密码。
- 配置密码复杂度
使用validate_password.so插件
3. 用户权限
Mysql提供的用户权限参考:Permissible Privileges for GRANT and REVOKE
- mysql.user表只有管理员(root)用户才能操作
说明:实际应用中,有修改mysql.user的用户都算超级用户,都禁止远程连接数据库。
- 避免以管理员用户创建存储过程和函数
- 以下权限只能赋予超级用户(root)
遗留:多实例情况下用户 multi_admin 也算管理员用户? 和root用户拥有一样的权限?
- 更改MySQL root用户的名字
4. 连接设置
- 监听地址不允许包含*,0.0.0.0,::
用户主机名不使用通配符%
- 超级管理员只能本地登录
- 限制数据库连接闲置等待时间
- 防暴力破解
扩展
5. ssl安全认证
- 确保对所有远端用户均设置了ssl_type参数
6. 涉及操作系统相关配置
6.1 系统资源
- 禁止数据库启动用户交互式登录
/etc/passwd文件,在mysql用户对应行添加/sbin/nologin或/bin/false.
6.2 文件权限
- 禁止mysql_history文件记录信息
限制安装文件属主和权限
- MySQL初始安装后,安装目录和文件属主要求为MySQL运行用户,目录权限要求为700,二进制文件为500,库文件为500,启动文件(一般位于/etc/init.d目录下)为500。
- 限制数据库数据文件属主和权限
数据目录和文件属主为mysql用户,数据目录为700,数据文件为600。
限制日志文件(含binlog)属主(mysql)和权限(600)
- MySQL数据库中常见日志文件有:
- 错误日志(log_error):
记录了MySQL的启停和运行过程。——有问题首先看这个文件。
二进制日志(log_bin):
- 记录了对数据库执行更改的所有操作。
作用:数据恢复、复制、日志审计(如判断有无注入攻击)。
log_bin [=name] # 默认关闭,需要配置此参数开启。不指定name默认文件名为'主机名.日志序号'。
备注:bin_log.00001即是二进制日志,bin_log.index为索引文件。二进制日志可使用自带的mysqlbinlog工具查看。
- 慢查询日志(slow_query_log_file):
记录运行慢的sql,帮助进行sql优化。
Tips: 可以借助mysqldumpslow命令帮助分析慢查询日志。
- 查询日志(general_log_file)
记录了所有对数据库请求的信息。
可以动态开启
与slow_log一样,可以将查询日志放入mysql.general_log表中。
- 限制my.cnf文件属主和权限
限制Plugin目录及其文件权限
- 取得Plugin目录路径:
目录权限为500, 目录下的文件权限为400:
限制SSLfile文件权限
- 数据库运行用户,权限是否为400。
取得ssl_ca、ssl_cert、ssl_crl、ssl_key文件路径
查看设置详细:https://www.comsz.com/help/show-1033.html