前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL权限处理的一个小bug

MySQL权限处理的一个小bug

作者头像
jeanron100
发布2019-09-17 14:11:07
4230
发布2019-09-17 14:11:07
举报
文章被收录于专栏:杨建荣的学习笔记

这是学习笔记的第 2103 篇文章

最近碰到了一个奇怪的权限问题,问题的背景是业务同学反馈在下班后,有一个数据表出现了阻塞,导致后续的业务流程都产生了拥堵,在对这个问题进行分析发现,业务同学所谓的拥堵,阻塞是数据库连接出了问题。当然我们进行了一些深入的沟通,对整个问题的情况有了一个更为清晰的了解。

6:30左右,业务同学发现程序端产生了阻塞,程序端正在处理的操作是一个create table的操作。

6:40左右,业务同学尝试通过客户端工具连接到数据库来手工执行,但是发现连接超时,根据业务同学反馈,之前是能够正常连接的。

6:50左右,业务同学开始呼叫DBA进行处理。

7:00左右,DBA就位后,什么都没做,就魔法般的解决了问题。

对于业务同学的印象,是数据库不够稳定,因为另外一套环境也出现了类似的问题,这是一个很纠结的情况,我们如同哆啦A梦般的存在,但是实际上什么都没有做就解决了问题。

当然在我的职业生涯中,对待问题我是不相信神奇的力量,事出有因,我希望找到那些看起来简单的问题的答案。

从业务同学的反馈时间点开始,我尝试找到一些相关的日志来看看,从数据库的处理来看,是不大可能阻塞DDL中的create操作的,无论服务器压力大小,这算是DDL里面最正常的需求了,绝对不应该阻塞几十分钟。

幸运的是,我很快找到了相关的binlog日志,简单解析之后,看到了下面的内容。

从内容来看,情况和业务同学反馈的时间点是吻合的,业务逻辑会自动创建相关的时间表,而下一次create则是在20多分钟之后,这里的问题就来了,为什么创建两张表的过程中会有这些权限处理的语句出现?

看这些权限处理的语句还是比较规范的,而且从执行日志来看不大像是人工执行的,因为整个权限的处理涉及的语句条数还比较多,从执行上来看,像是工具生成的。

我查看了下相关时间范围内的工单数据,发现在那个指定的时间段里,确实有同事在处理几个相关的工单,带着这个信息和同事确认,才发现这两件看起来不相关的事情还是有关联的。

业务同学反馈,有两套环境都出现了类似的问题,和工单数据比对发现,情况是完全相符的,在出现问题的时间段里产生了阻塞。

我们来仔细看一下这条语句:

GRANT USAGE ON *.* TO 'srv_datasync_rwh'@'192.168.18.%' IDENTIFIED WITH 'mysql_native_password' AS '*5EEBC522DE487B0D5C2506C65412F9C337F70C40'

这条语句是对于192.168.18端的客户端开通相应的权限,而这个grant语句其实是类似MySQL 5.7的create user语句,带着这个问题继续下钻,发现原来这个数据库中本身是存在用户'srv_datasync_rwh'@'192.168.18.%' 的,在这里,相当于工具重新生成了完整的授权语句,对已经存在的用户进行了重新授权,这个操作的代价有点类似于权限重置。

而这个问题在测试环境中模拟是直接复现不了的,整个问题和触发的上下文环境也有相关性,同时对涉及到权限处理的完整过程中产生了额外影响,有点类似于在购物网站中,一边在购物下单,另一边在同时做密码重置,这是一种较为模糊的临界状态。

总体来说,这个权限问题还是相对可控的,我们需要修复运维工具自动生成的语句的逻辑,对于5.7版本的使用create user,grant这种组合授权模式。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档