第十七章:第47节Linux安全防护——mysql数据库的账号ip防护策略

更新于:2019-01-24 14:47:37

数据库是一个项目的核心,尤其做web开发,数据库的安全至关重要。黑客如果有机会连接上项目的数据库,一定会想法做密码破解,如果我们使用了默认账号root,密码也设置过简单了,暴力破解很容易。把数据库做到绝对的安全,起码得是就算黑客知道账号、密码是多少,我都不给你登录的机会。


1)把监听ip设置127.0.0.1,把mysql服务做成内网服务


mysql服务不对外网开放端口,这样黑客想连都连不上,这样mysql就会变得安全。楠神推荐这样!


可外网无法连接mysql,也会带来一些不便。比如不能使用Navicat直接操作mysql。在正常的运营维护中,有时候会经常用到Navicat,楠神平时会经常用到,比如每天都要手动备份mysql到本地;线上程序出错,需要copy数据在本地调试;还有做大量的数据计算不适合在线上弄,只好把数据下载本地弄;应用程序没有相应的功能,为了临时解决问题,直接用Navicat修改数据库个别数据……


基于为了方便,mysql服务还是对外网做了开放。


2)当mysql服务做成外网服务


①不使用默认3306端口号,修改一个不易猜的端口号,参考上节内容。


②禁止root账户外网使用,为外网创建新账号并做好ip限制


在mysql数据库


1.png


有个“user”表


1.png


“HOST”字段作用蛮大的,起到ip限制作用。

第一行:“%”表示任何ip的主机(客户端)都可以使用“nanshen”这个账号连接数据库。

第五行:“localhost”表示只有本地主机(客户端)才可以使用“root”这个账号连接数据库。


注意如下:


1、楠神现在用的是8.0.13版本的mysql,5.几版本的mysql通用ip是这样表示的:“%.%.%.%”。


2、尽量不要有Host为“%”、User为“root”,root账户我们只允许在服务器本地使用,不供外网使用,防止黑客恶意暴力破解密码。


3、“localhost”表示的是域名,它的解析IP是“127.0.0.1”,有时候明明客户端与mysql服务端在同一服务器,却还是报不能连接的错误。此时,在user表可以在添加一个“host”为“127.0.0.1”,“user”为root的记录。


4、“nanshen”是我起的一个账户名,大家自己起个不为他人所知的账号名。“host”字段不要使用“%”,而是使用我们自己本地电脑的对外IP。mysql连接也是基于TCP连接的,所以IP是可信不易伪造。这样虽然mysql服务对外网开放端口,客户端连接它,它还是会做IP验证,如果客户端IP不对,就拒绝访问。


当然我们个人电脑的对外IP不是一成不变的,每隔一段时间就会改变。那我们就得再次去修改“host”字段值。因为本地IP更换了,Navicat是不能连接mysql了,只能登录ssh修改。


修改步骤参考:


mysql -uroot -p 密码
use mysql;
select host from user; 查看下旧ip
update user set host = '新ip' where host = '旧ip';
flush privileges;
exit


总结:


mysql的对外安全就这三点:更改端口号;root账号不对外网开放;外网专用账号做好IP限制,限制的ip精确到具体的某一ip,而不是ip段。