1、版本安全

NO.1

确保此版本数据库没有漏洞

原因

破坏者会通过漏洞进入数据库,造成数据库丢失、泄露等情况

解决

在保证业务及网络安全的前提下,并经过兼容性测试后,安装更新补丁

升级最新无漏洞版本

2、账号、权限基线检查

NO.1

启动 MySQL 的系统账号 是否单独创建且不允许登陆

原因

禁止 Mysql 以管理员帐号权限运行,以普通帐户安全运行 mysqld

解决

在 /etc/my.cnf 配置文件中进行以下设置[mysql.server]user=mysql

检查方法

ps -cf | grep myslqdgrep -i user /etc/my.cnf

NO.2

删除默认数据和帐户(包括匿名账号)

原因

Mysql默认会有空用户和test库

解决

删除test库和除root外帐户再按照业务需求添加mysql> drop database test;​​mysql> delete from user where not (user='root');​​mysql> drop user ''@'localhost';​​​ mysql> drop user ''@' localhost.localdomain';​

NO.3

增强root帐户密码登陆、删除空密码

原因

一、简单密码容易

二、mysql默认是空密码

解决

一、增强密码强度- 22位以上- 同时包含大写字母、小写字母、数字、特殊字符- 密码不重复使用- 密码定期更换(60天、90天)二、给空密码帐号加上密码

mysqladmin -u root password "newpassword"mysql> use mysql;mysql> update user set password=password('newpassword') where user='root';mysql> flush privileges;

NO.4

更改root帐户名称

原因

Mysql管理员帐号默认名称为root,存在被爆破的风险

解决

更改root帐户名称以增大爆破成本

mysql> update user set user='newrootname' where user='root'; mysql> flush privileges;


NO.5

设置root账号只能本地连接

原因

root账号远程连接不利于数据库安全

解决

​use mysql;​​​​select user,host from user;​​​​update user set host = 'localhost' where user = 'root';​​​​flush privileges;​


NO.6

在数据库权限配置能力范围内,根据用户的业务需要,配置其所需的最小权限

原因


解决

1、查看数据库授权情况:

​mysql> use mysql;​​​​mysql> select * from user;​​​​mysql>select * from db;​​​​mysql>select * from host;​​​​mysql>select * from tables_priv;​​​​mysql>select * from columns_priv;​

2、通过revoke命令回收不必要的或危险的授权。



3、网络连接基线检查

NO.1

默认端口是否修改

原因

默认端口容易被

解决

在 /etc/my.cnf 配置文件中进行以下设置,禁止设置为3306[mysqld]port=xxxx

保存,退出my.cnf

重启MySQL数据库


NO.2

如果不需要,应禁止远程访问禁止网络连接

原因

防止猜解密码、溢出、和嗅探

解决

注意: 仅限于应用和数据库在同一台主机的情况。如果数据库不需要远程访问,可以禁止远程 TCP/IP 连接,通过在 MySQL 服务器的启动参数中添加--skip-networking参数使 MySQL 服务不监听任何 TCP/IP 连接,增加安全性。您可以使用安全组进行内外网访问控制,建议不要将数据库高危服务对互联网开放。