mysql-ip权限操作与限制失效问题

时间:2024-05-19 19:12:07

一、背景

由于最近在github上的多人合作项目,涉及到了后台链接数据库。为方便统一管理数据库,保证数据一致性,开发时大家统一连接到远程数据库(数据库架设在腾讯云上)。但是由于项目属于github开源项目,所以存在数据库链接相关的密码从后台代码中泄漏的问题。

  • 一般的解决方案,就是每次上传前,手动删除密码,来确保密码不会被泄漏。当然这是一种解决方案,但是每次上传都需要删除,下载后又要添加,实在是很麻烦。
  • 还有一种方案来解决问题,就是通过限制登录ip,让数据库过滤掉禁止的ip。虽然在同一ip下,数据库还是有被入侵的风险,但是对于处于开发测试状态的数据库还是够用了(极大多数的入侵可以被防止)。

二、 实现

实际上在mysql权限管理中就已经存在,针对访问ip的限制,对应mysql.user中的host字段。
在我们在设置用户时’a’@‘localhost’。@符号后边的部分就是限制mysql登录的ip。它可以以下的几种形式:

  • ‘a’@'localhost’只允许本地访问
  • ‘a’@’%'允许任何ip(但不允许本地)
  • ‘a’@'132.45.23.227’允许指定ip
  • ‘a’@'132.45.23.%'允许ip范围
  • ‘a’@‘132.45.%’

三、应用

通过这个设置,就可以实现指定ip的访问。当出现指定之外的ip访问,会出现以下错误:
mysql-ip权限操作与限制失效问题
网上有很多关于这个错误的解释,但是请大家注意在限制IP后,允许的ip访问会直接登录成功,但是异常ip访问也会出这个问题。 不一定是数据库密码加密方式的错误。因为我在这里就遇到了问题,做了大量的测试,最后发现就是ip限制的问题。

四、遇到限制错误的问题

通过查询外网ip,在数据库设置相关ip后,但一直出现上图的链接错误问题。当我将权限设置为指定ip就无法连接,设置为‘%’就可以链接。
经过仔细推理分析,觉得问题应该是:请求ip与数据库指定ip不同。为了证实这一点,通过linux抓包分析,来求证自已的猜测,通过设置了一些过滤条件,将数据库请求提取出来。
mysql-ip权限操作与限制失效问题
真正发送请求的ip,和我本机的外网ip 果然不一样。通过更改Linux数据库中ip限制,解决了这个mysql-ip限制的错误。

linux抓包命令博客:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html


五、分析思考

  • 事后分析原因,是什么导致了:真正发送请求的ip,和我本机的外网ip 不一样。通过ip查询工具,分析网络性质,最后得出了一个结论,我的本机ip性质属于教育网。
  • 教育网通过整合各个学校的网络资源,来提供网络服务,教育网一般是通过校园网升级得来,而校园网中存在各种路由,转发,协议。所以本机的外网ip是教育网动态分配的ip,真正的网络请求不是从本机发的,而是校园网网络转发的。所以在服务器这边限制ip,不应该限制本机的ip,而应该限制校园网的ip。

我的数据库学习笔记:https://blog.****.net/konghouy/article/details/86558909