上周学习了一下LANMP安全配置之Apache安全配置
用的最多的数据库就是MySQL了
所以这周继续学习一下MySQL安全配置
还是参考《PHP Web安全开发实战》一书,再做一些补充
安装成功后第一件事就是改root默认密码,然后设置复杂密码
在了解权限分配之前
先了解以下MySQL下的几个控制权限的表
另外 INFORMATION_SCHEMA也保存一些权限信息,是为DBA提供元数据的一种方式,但它实际上是一个视图,不是表。
再了解一下权限分配验证流程
PHP与数据库进行连接登录时
第一步,身份认证。先从USER
表判断IP
、用户名
、密码
是否存在
第二步,权限分配。按照USER->DB->TABLES_ PRIV->COLUMNS_PRIV
的顺序进行梯级验证。
验证过程中,如果USER表中对应权限为Y,则此用户对所有数据库的权限全为Y,将不再验证DB、TABLES_ PRIVH和COLUMNS_PRIV;如果为N,则往下一级(DB)进行验证。
所以MySQL中的权限安全配置:
(1)针对每个网站建立一个单独的账户
(2)为每个网站单独建立一个专属数据库
(3)按照user->db->tables_priv->columns_pri的顺序进行细粒度的权限控制
(4)为每个用户单独配置一个专属数据库,保证当前用户的所有操作只能发生在它自己的数据库中,防止SQL注入发生后,黑客通过注入点访问到系统表
MySQL默认使用3306端口
1.限制IP
对于MYSQL的限制访问IP,可从两个方面达到目的
(1)主机层
Windows下,可通过Windows防火墙
Linux下,可通过iptables
来限制允许访问的IP
Eg:只允许192.168.1.0网段进行访问
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT iptables -P INPUT DROP
(2)应用层
在USER表中限制root账户只能在本机登录
如图
2.修改端口
Windows,在MySQL配置文件my.ini
中设置
Linux,MySQL配置文件为my.cnf
port = 3306
3.限制单个用户的连接数量
更改my.ini中max_connections=值,保存文件,重启mysql服务。
启动MySQL日志来帮助加固MySQL安全
MySQL下有以下几种日志
查看日志是否开启命令:
show variable like 'log_%';