前言:今天登服务器,突然发现数据库被黑客勒索了,造成大量的数据丢失!啊啊啊损失惨重,所以必须加强数据库安全防护工作!
MySQL是最流行的开源数据库引擎,本身是非常安全的。但仍需要添加额外的安全层来保护你的MySQL数据库不受攻击。下面将介绍一些实用的办法,来保护MySQL数据库,加强网站的安全性。
确保操作系统的安全是保护数据库安全的前提,维护操作系统和MySQL服务器,你可以使用以下方法:
攻击者侵入MySQL数据库最常见的一种方法是窃取有安全隐患的账户信息。为了降低出现这种风险的可能性,不妨试一试下面的方法:
管理员账户越多,风险越大,应该保持尽可能最少的帐户数量,只有为那些真正需要它的人创建账户。需要定期检查并清理那些不必要的账户。
除了管理员帐户,还需要加强所有其他用户的密码,检查所有的用户名和密码,必要的时候重置安全强度低的账户密码。
每个用户都应该被授予适当的权限以便数据库能够正常运行,但这样一来也加大了数据库的安全隐患。就数据库权有以下几点建议:
1.不要授予非管理员用户文件/高级/程序权限
文件,高级和程序权限都不应该被滥用。文件权限让用户可以在文件系统中的任何一个地方编写文件,而程序权限让用户在任何时候都能够查看服务器活动,终止客户端连接甚至更改服务器操作。为了数据库安全,这些权限只能授予给管理员账户。
2.限制或禁用显示数据库权限
显示数据库特权可以用于收集数据库信息,所以攻击者通常利用它来窃取数据并准备进一步攻击。应该把这个权限授予那些真正需要的人,或者直接禁用这个权 限,你只需要把skip-show-database添加到MySQL数据库中的/etc/my.cnf配置文件中。对于Windows操作系统来说,则需要添加到my.ini文件中。
3.限制管理员和所有其他用户的权限
即使是管理员,也不要在同一账户中授予所有权限。最好降低管理员账户访问数据的权限。其他的用户,检查所有他们拥有的权限,以确保一切都是合适的。
MySQL数据库的默认配置有一些不必要的组件,可以考虑以下将它们删除,具体有:
1.禁用LOAD DATA LOCAL INFILE指令
这个命令允许用户读取本地文件甚至访问其他操作系统上的文件,这可能帮助攻击者收集重要的信息并利用应用程序的漏洞侵入你的数据库。需要做的是把set-variable=local-infile=0插入到MySQL数据库的my.cnf文件中,来禁用这个指令。
2.删除测试数据库
有一个默认的“测试”数据库用于测试目的。由于这个数据库有安全风险,匿名用户也可以访问,你应该使用mysql> DROP database test;指令尽快把它清除掉。
3.删除历史文件
MySQL服务器有一个历史文件,它可以帮助你在安装出错的时候找到问题所在。历史文件包含敏感信息,比如说密码,如果这些信息被攻击者获得,那么将会给数据库带来巨大的安全隐患。在安装成功后,历史文件并没有什么用,因此你可以使用cat /dev/null > ~/.mysql_history指令来删除文件当中的内容。
对于大多数用户来说,不需要通过不安全的开放网络来访问MySQL服务器。可以通过配置防火墙或硬件,或者迫使MySQL只听从localhost来限制主机。此外,需要SSH隧道才能进行远程访问。
如果你想仅仅从本地主机来限制用户建立连接,只需要在配置文件中添加bind-address=127.0.0.1。
启用日志记录让你可以检测服务器上的活动,这样你就可以分析失败的登录尝试和敏感文件的访问记录,以便了解是否存在向服务器和数据库发起的恶意活动。 只需要把log =/var/log/mylogfile指令添加到MySQL配置文件中,就可以手动启用日志记录功能。
至于日志记录,需要注意以下两点:
1.日志记录仅适用于查询数量有限的数据库服务器。对于信息量大的服务器,这可能会导致高过载。
2.由于“hostname.err”文件包含敏感数据表名和密码,只有“root”和“mysql”才有访问和记录这个文件的权限。
设置成固定IP可以远程访问不要使用’%’ , 所有IP都可以访问。
(1). 默认root账号权限设置:
root用户不要开放只做为本机服务器登陆的使用权限
–授权用户
grant all privileges on . to ‘root’@‘localhost’ identified by ‘密码’ with grant option;
flush privileges;
(2). 新用户权限设置:
–创建新用户
CREATE USER ‘用户名’@‘访问IP地址’ IDENTIFIED BY ‘密码’;
FLUSH PRIVILEGES;
给新用户赋数据库的权限只开放相应的业务库
GRANT ALL PRIVILEGES ON 库名.* TO ‘用户名’@‘访问IP地址’;
FLUSH PRIVILEGES;
mysql在安装过程中不要使用默认3306端口要改成其他端口
[mysqld] port=3306 #修改为其他端口 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql