数据库安全是非常重要的,今天我们来聊下数据库的防护问题。
禁用root用户远程登陆
为什么要禁用root远程登陆?
我们所有人都知道mysql有root用户名,如果我们没有禁止root用户远程登陆,那么别人就可以使用该用户名,然后只需要破解root的登陆密码就行。
所以我们应该禁止root用户远程登陆,这样别人要想登陆我们数据库就必须猜测出我们的用户名并且猜出我们的密码。(www.hedaoshe.com)
我们用数学表达式来计算下黑客的工作量。
假如允许root用户远程登陆 用户名是确定的,密码是不确定的,假设10000次他能尝试出来密码,所以10000次以后黑客就能登陆我们数据库。
假如我们禁止root用户远程登陆 用户名不确定,假设要尝试10000次才能破解,密码也不确定,假设也是尝试10000次才能破解。这样黑客要破解就需要10000*10000次才能破解登陆。
通过上面的推到我们能发现,禁用root用户,黑客的工作量大了10000倍。
如何禁用root远程登陆
在mysql的系统数据库中有个user表,里面记录了所有用户命和权限,我们只需要删除掉root@%
这条数据就行。
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
#刷新权限
flush privileges;
指定用户登陆并加强登陆密码
其实还是和禁用root用户远程登陆配套来的,我们总需要一个用户登陆,根据上面的计算结果,我们知道登陆用户名和密码越复杂,黑客的工作量越大,所以用户名和密码最好都设置非常复杂,最好是用base64加密,如果真的这样设置我可以想象的出黑客憔悴的神态。
当然我们还应该指定该用户对某些数据库的权限,这样可以避免全局破坏。
如何指定用户名和密码
其实还是使用sql语句,mysql里面一切都是sql语句
CREATE USER '<用户名>'@'%' IDENTIFIED BY '<密码>';
GRANT ALL ON <某数据库>.* TO '<用户名>'@'%';
flush privileges;
修改mysql端口
mysql默认端口是3306,这也是很多人知道的,所以修改该端口也是有必要的。
因为我实用docker版本的mysql,所以我不需要去容器内部配置文件里面修改,只需要在docker-compose指定映射端口的时候,指定某个映射端口。这个很简单,就不细说了
总结
禁用root用户远程登录、设置复杂的远程登录用户名和密码、修改mysql端口,只要做好这三步骤,就能杜绝大部分黑客入侵。