浅谈MySQL安全加固

举报
浮尘 发表于 2021/01/31 11:12:33 2021/01/31
【摘要】 MySQL作为一个非常受欢迎的关系数据库系统,在业界应用非常广泛,特别是无数中小网站,都喜欢采用mysql作为后台数据库。由于数据库的敏感性,作为存储网站各种关键数据的核心,也是非常容易受到各种网络病毒攻击的对象。对于IT行业的龙头老大,通常都会采购足够强大的网络防火墙,聘请行业出名的安全工程师,通过诸多手段对产品数据库进行安全加固。然而对于资金有限的中小企业来说,又该如何加固Mysql的安...

MySQL作为一个非常受欢迎的关系数据库系统,在业界应用非常广泛,特别是无数中小网站,都喜欢采用mysql作为后台数据库。

由于数据库的敏感性,作为存储网站各种关键数据的核心,也是非常容易受到各种网络病毒攻击的对象。

对于IT行业的龙头老大,通常都会采购足够强大的网络防火墙,聘请行业出名的安全工程师,通过诸多手段对产品数据库进行安全加固。

然而对于资金有限的中小企业来说,又该如何加固Mysql的安全呢?

其实mysql自身已经提供了一系列安全机制,来加固mysql安全。

下面我们来具体看一下mysql的一些安全措施:

1: 修改默认端口

mysql的端口默认是3306,也是病毒攻击mysql数据库时的首选端口,我们可以通过修改mysql的配置文件,把默认端口改成一个其它人很难想到的端口,如3901.

如果病毒再攻击,也要先具备扫描指定IP的端口能力才行。

2:修改root用户

MySQL的默认用户root,是很容易被黑客拿来做暴力破解的,我们可以把默认的用户改掉,从数据库中删除,避免黑客对这个默认用户名进行暴力破解。

需要注意的是,删除root用户之前,应额外创建一个具有超级管理员权限的用户,便于DBA进行管理。

3:添加密码安全策略

mysql的密码默认情况下,没有复杂度要求,密码设的过于简单,可能会被病毒程度猜到,我们需要设置一个足够复杂的密码。同时添加密码复杂度验证插件,如果其它人添加用户创建密码也必须满足复杂度要求。例如下面的设置:

plugin-load=validate_password.dll   
validate_password_policy=0
validate-password=FORCE_PLUS_PERMANENT
validate_password_number_count=1   //密码必须包含至少1个数字
validate_password_special_char_count=1   //密码必须至少包含一个特殊字符

4:添加连接控制策略

如下所示:

plugin-load-add=connection_control.dll
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
connection_control_failed_connections_threshold=10  

5:用户权限指定IP

授予用户权限时,每次都指定IP,去掉%权限,任何机器或者客户端想要连接进来,都要添加IP赋权,否则无法访问

6:开启域名解析

skip-name-resolve 是个不错的参数,能避免跨IP跨域访问的机器可能会因为域名解析失败导致无法访问服务器的问题;

但是也会间接降低服务器的安全性;

我们可以把域名解析的问题交给专业的DNS服务器去做,也可以在数据库服务器操作系统本身添加IP和域名的映射,然后在数据库中去掉这个参数;

所有跨域的机器都必须由管理员添加映射,否则无法访问。这样可以进一步降低数据库的风险。

同时skip-grant-tables这个参数绝对不能出现在配置文件中,不允许出现不要验证就能访问数据库的情况。

7:表文件加密

early-plugin-load=keyring_file.dll
#设置加密key存放路径  
keyring_file_data=D:/ProgramData/MySQL/keyring/data

我们通过配置keyring插件,来实现给表文件加密,虽然对mysql来说,这不是一个非常值得称赞的安全措施,但是还是能够防止相当一部分不精与此道的病毒或者黑客破解数据库的数据的。

当然,上述的配置只是一部分,我们还需要在创建表结构的语句中制定表解密,来实现表文件的加密。

8:彻底关闭远程访问

如果你的数据库不需要远程访问,应用程序和数据库服务部署在同一台服务器,我们可以添加

skip-networking 这个参数来彻底关闭其它客户端的访问。

这个时候如果确有需要某些IP访问的话,可以用绑定IP的方式: bind-address=192.168.1.100 这样只允许绑定的IP能够访问数据库服务器。

9:SSL连接

Mysql可以配置SSL,让客户端连接必须通过SSL来连接。

如:

ssl-ca=/root/ca/ca.pem
ssl-cert=/root/ca/server.pem
ssl-key=/root/ca/key.pem

添加SSL证书后重启mysql服务;再修改用户登录策略:

单向认证(必须使用SSL登录,不验证证书):
update user set ssl_type=‘ANY’ where user=‘ssl_test’;
flush privileges;
双向认证(必须使用SSL登录,并且验证证书):
update user set ssl_type=‘X509’ where user=‘ssl_test’;
flush privileges;

这样的话用户就必须按照指定的SSL连接才能登录mysql

10:添加windows认证

 plugin-load=authentication_windows.dll 详细的大家可以看mysql官方手册,通过 这个配置最终可以实现只允许域服务器的指定用户来访问mysql

好了,今天的分享就到这里了,mysql的安全措施主要就这些。其它的安全措施就主要是操作系统层面的了,包括给windws添加防火墙,防PING,防扫描,同时只允许指定IP,端口,应用程序通过,等等。希望对大家有所帮助!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。