关于加强数据库安全的一些实践
最近遇到的一件悲催的事情,我写的一个web应用部署上服务器没多久刚刚有第一批用户数据库就被人黑掉了,所有用户数据全部没了,在一些前辈的建议下,亡羊补牢采取了一些补救措施,总结如下,如果你也是小白,希望能对你有所帮助。
1.修改数据库服务密码
一般默认安装好的mysql服务用户root密码root,为了安全起见还是修改一个复杂点的数据库密码比较好。
2.关闭没有使用的端口,开启防火墙
用了哪些端口开启哪些端口,比如我这里只用到了三个端口,那我只开启这三个端口的访问权限(一般防火墙设置文件在/etc/sysconfig/iptables)
3.干掉数据库drop和delete权限
命令行或phpmyadmin登录操作,干掉所有用户的drop和delete权限,保存
4.禁止外网访问mysql操作,限制127.0.0.1即服务器本地
进入服务器,编辑/etc/my.cnf,将mysql访问绑定ip为127.0.0.1
5.脚本自动定期备份数据库
写好数据库备份脚本,设置定期自动执行
有需要的朋友可以参考:https://github.com/yubang/mysqlBackupTools/blob/master/mysqlBackupTools.py
修改一些配置参数就可以拿来用了
PS.执行的脚本文件路径要写成绝对路径;由于mysqldump的执行时会消耗服务器资源,所以建议设置深夜自动备份
执行自动备份脚本遇到的问题:
mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)
这是因为系统默认的mysqldump版本太低,我们应该将脚本中执行的mysqldump指向mysql server目录下mysqldump
(1)使用mysqldump --version可以查看mysqldump的版本
很明显我的mysqldump版本太低了,因为mysql的版本是5.6
(2)使用which mysqldump可以查看默认的mysqldump目录
(3)使用locate查看还有那些mysqldump
可以看到有三处地方有mysqldump,由于/usr/bin/nysqldump是指向/usr/local/mysql/bin/mysqldump的软链接,所以很明显/usr/local/mysql.bak/bin/mysqldump才是我们想要的,把脚本中的mysqldump写全路径替换成/usr/local/mysql.bak/ bin/mysqldump,再手动执行一次脚本,发现执行成功没有报错。
查看设置的备份文件目录/backup,备份成功