现在的位置: 首页 > 关系型数据库 > 数据库代理 > 正文

DBPRoxy 监控用户(backend-monitor-pwds)未配置,引起后端DB日志出现登陆报错

时间:2018年06月29日 | 分类:数据库代理 | 评论:0 条 | 浏览:310 次

最近,在新上线的一套DBProxy+MySQL项目过程中,发现后端MySQL DB出现登陆报错:

[Warning] Access denied for user 'apps'@'192.168.1.146' (using password: NO)

以上报错为测试环境,模拟产生的报错信息,实际生产环境是 Access denied for user 'root'@'proxy IP' (using password: NO)

查看了其它DBProxy后端的DB,没有此类报错。

对比问题DBPrroxy和正常DBProxy的配置文件,版本等信息,发现都是一样,无差异。

这样看来,好紧张,居然有root用户尝试远程登陆,这是多危险,被攻击了????当时的第一反应(其实要说明一点,root用户其实设置了只能本地登录)。

登陆问题DBProxy服务器,查询进程,top,抓包,看proxy日志,系统日志,都未发现异常,但是,后端所有DB的报错还在持续。

果断,在测试环境复现问题,复现环境如下:

MySQL Version:MySQL 5.7.22

DBPrroxy Version:5.0.99-agent-admin

MySQL 重要参数配置:log_warnings = 2 (设定是否将警告信息记录进错误日志。默认设定为1,表示启用;可以将其设置为0以禁用;而其值为大于1的数值时表示将新发起连接时产生的“失败的连接”和“拒绝访问”类的错误信息也记录进错误日志)

后端DB报错截图如下:

4

在测试环境复现,我们发现如下几个问题:

1.如果用错误的账号来连接DBProxy时,DBProxy的日志会打印出报错信息(这里的192.168.1.146 为DBProxy的IP地址),但我们生产环境上DBProxy没有任何相关报错日志

测试命令如下:

[apps@unify-mysql mysql]$ mysql -uapp -p -h192.168.1.146 -P8888
Enter password:
ERROR 1045 (28000): Access denied for user 'app'@'192.168.1.146' (using password: YES)

DBProxy报错截图如下:

2

2.从DB后端错误日志,我们发现一些问题:

生产环境是root@proxy ip 登陆报错,root账号,后端DB是存在这个账号的,这个也就是我们第一反应被攻击的缘由

测试环境是apps@proxy ip登陆报错,apps账号,后端DB不存在这个账号,这是怎么回事呢?大家猜猜!!!文章结尾,我揭晓原因~~~

3.我们尝试从DBProxy,剔除一台从库,看看还会不会报错,剔除后,发现日志干净了,一点报错也没有,到这里,我们心里就踏实了,不是被攻击了,是DBProxy自己去连后端DB的!!

4.于是我们仔细检查DB日志,发现登陆存在一定的规律性,每隔4秒,出现一次报错,截图如下:

1

同时,我们看了DBProxy的相关参数,发现有一项参数,正好设置的是4秒,同时,我咨询了官方的海涛同学,证实了我们刚才的猜想,答复是这样的:

MySQL协议里,如果没有显示的指明用户名的话,会使用root连接。DBProxy里,如果没有配置monitor账号,DBProxy在监控后端DB的时候,会使用NULL用户名去连接DB,MySQL端会认为是root账号连接的。默认proxy的monitor周期检测是4s一次,但是每次检测会遍历每个DB,所以并非完全4s精准~

于是,我们设置monitor账号,命令如下:

set backend-monitor-pwds=dbproxy_user:dbproxy_user;

此时参数的截图如下:

3

此时,我们再看后端DB的日志,发现错误消失了,问题到此,算是找到原因,并解决了

总结:

1.为什么线上环境报错日志是root连,而测试环境报错日志是用apps连??

如果贵司已经进行目录标准化后,我相信您的部署,肯定不是用官方的脚本,而是按照自己的规则定义,比如目录属主,安装路径,启动用户等等,这里就是因为线上用root用户启动,目录属主为root。而测试环境是我自定义安装的,属主为apps用户,启动用户也是apps用户

2.线上DBProxy文件,对比一致,为什么只有这一套环境有报错??

由于DB配置文件不标准化,部署因人而异,log_warnings设置成0了,这个因公司而异,很多公司,这个参数的确设置为0

3.最后,要说明的,任何自动化的前提,都需要标准化,这里不仅目录标准化,还有配置标准化,部署标准化,操作标准化等等。任重而道远~~~

×