百摩网
当前位置: 首页 生活百科

网络故障证明文件(故障分析密码使用特殊字符)

时间:2023-06-28 作者: 小编 阅读量: 3 栏目名: 生活百科

网络故障证明文件作者:王祥爱可生DBA团队成员,主要负责mysql故障处理和性能优化。经过与正常用户对比发现存在登录异常的用户使用了特殊字符"$"。首先可以确认一下存入数据库的密码是否正确。我们可以手动新建一个用户密码与app用户密码保持一致。使用mysql登录时密码加单引号或手动输入密码此时$2没有被解析成空,与数据库中的密码不一致无法登录,而密码加双引号或不加时$2被解析成空,刚好和数据库的密码一致此时能正常登录数据库。

网络故障证明文件?作者:王祥爱可生 DBA 团队成员,主要负责 mysql 故障处理和性能优化对技术执着,为客户负责,今天小编就来聊一聊关于网络故障证明文件?接下来我们就一起去研究一下吧!

网络故障证明文件

作者:王祥

爱可生 DBA 团队成员,主要负责 mysql 故障处理和性能优化。对技术执着,为客户负责。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


背景

最近在使用脚本新建了一批应用用户,发现一个奇怪的问题,有部分用户存下以下问题:应用使用该密码能正常访问,但使用 mysql 客户端登录手动输入密码无法登录。经过与正常用户对比发现存在登录异常的用户使用了特殊字符"$"。

问题复现

在测试环境使用脚本生成一批用户

#新建用户脚本简化后如下#!/bin/bashpw="abc$2UY"mysql --login-path=root -e"create user app@'%' identified by '$pw'"mysql --login-path=root -e"grant insert,update,delete,select on *.* to app@'%'"#测试使用mysql客户端登录[root@node3 ~]# mysql -h127.0.0.1 -uapp -p#手动输入密码无法登录Enter password:ERROR 1045 (28000): Access denied for user 'app'@'127.0.0.1' (using password: YES)[root@node3 ~]# mysql -h127.0.0.1 -uapp -p'abc$2UY' #使用单引号无法登录mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user 'app'@'127.0.0.1' (using password: YES)[root@node3 ~]# mysql -h127.0.0.1 -uapp -pabc$2UY #不加单引号或使用双引号都可以登录mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.Commands end with ; or \g.Your MySQL connection id is 15389Server version: 8.0.18 MySQL Community Server - GPLCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

问题分析

正常的话上述登录方式都是可以正常登录数据库的,那为什么部分可以部分不可以呢?首先可以确认一下存入数据库的密码是否正确。我们可以手动新建一个用户密码与 app 用户密码保持一致。然后比较 mysql.user 表中 authentication_string 字段是否一致。

mysql> create user test@'%' identified by 'abc$2UY';Query OK, 0 rows affected (0.05 sec)mysql> select user,host,authentication_string from mysql.user where user in ('app','test'); ------ ------ ------------------------------------------- | user | host | authentication_string | ------ ------ ------------------------------------------- | app| %| *06E0B7BA0149152EE2A387A144A2DF9ACC492297 || test | %| *7258A15F121DD9F6F7C40C08D34A3DB5ED8C8CB5 | ------ ------ -------------------------------------------

通过对比 authentication_string 字段发现两个密码不一致,说明脚本生成的用户密码并不是原来的密码了。为什么会这样呢?我们知道在 shell 中使用单引号与双引号定义的字符串是有区别的。如下:

[root@node3 ~]# echo "abc$2UY"abcUY[root@node3 ~]# echo 'abc$2UY'abc$2UY[root@node3 ~]# echo abc$2UYabcUY

单引号定义字符串所见即所得,双引号引用的内容,所见非所得。如果内容中有命令、变量等,会先把变量、命令解析出结果,然后再输出最终内容。分析到这回头看脚本密码使用了双引号导致了 $2 被解析成了空,最终存入数据库的密码为:abcUY 。使用 mysql 登录时密码加单引号或手动输入密码此时 $2 没有被解析成空,与数据库中的密码不一致无法登录,而密码加双引号或不加时 $2 被解析成空,刚好和数据库的密码一致此时能正常登录数据库。下面我们新建一个用户密码设置成:abcUY ,验证一下。

mysql> create user test1@'%' identified by 'abcUY';Query OK, 0 rows affected (0.03 sec)mysql> select user,host,authentication_string from mysql.user where user in ('app','test','test1'); ------- ------ ------------------------------------------- | user| host | authentication_string | ------- ------ ------------------------------------------- | app| %| *06E0B7BA0149152EE2A387A144A2DF9ACC492297 || test| %| *7258A15F121DD9F6F7C40C08D34A3DB5ED8C8CB5 || test1 | %| *06E0B7BA0149152EE2A387A144A2DF9ACC492297 | ------- ------ -------------------------------------------

比较用户 app 与 test1 的 authentication_string 字段发现一致,说明 app 密码确实是 abcUY 。其实不止$符会有这个问题,其它特殊字符也会存上以上问题。所以在新建用户或登录数据库时如果密码包含特殊字符需要注意是否会被解析的问题。

另外在使用 login-path 免密登录配置时,如果密码包含“#”符号,存在一个 bug(https://bugs.mysql.com/bug.php?id=95597)正常配置的密码无法登录到数据库,需要加上双引号。测试如下:

mysql> create user app2@'%' identified by '123#abc';Query OK, 0 rows affected (0.01 sec)[root@node3 ~]# mysql_config_editor set --login-path=app --user=app2--host=127.0.0.1 -pEnter password:输入123#abc[root@node3 ~]# mysql --login-path=appERROR 1045 (28000): Access denied for user 'app2'@'127.0.0.1' (using password: YES)#规避这个bug也很简单,配置时输入密码加上双引号[root@node3 ~]# mysql_config_editor set --login-path=app --user=app2--host=127.0.0.1 -pEnter password: 输入"123#abc"[root@node3 ~]# mysql --login-path=appWelcome to the MySQL monitor.Commands end with ; or \g.Your MySQL connection id is 15542Server version: 8.0.18 MySQL Community Server - GPLCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

该 bug 在 MySQL 5.7.33 ,MySQL 8.0.23 修复。

总结

1.新建用户及登录用户时如果密码存在特殊字符需要注意特殊字符会被解析成其它字符,需加上单引号或加上转义字符\。

2.在 MySQL 5.7.33 与 MySQL 8.0.23 版本前使用 login-path 时密码存在"#"时,配置时输入密码需要加上双引号。

    推荐阅读
  • 阴阳师买御魂礼盒(阴阳师御魂礼盒怎么得)

    玩家们可以通过在御魂十层获得的大蛇鳞片,然后在秘卷书童处,用大蛇鳞片兑换御魂礼盒,礼盒内拥有一个随机六星御魂,每周限购3个,大蛇鳞片的携带数量上限为50个,达到携带上限时无法继续获得。目前,御魂礼盒只能在秘卷书童处购买获得,玩家每周最多购买三次。爱萌游戏阴阳师玩家交流群已创建,快来一起抱大腿,撩妹子,吸欧气,直接点击或搜索群号即可加入>>>>>>>>318979505

  • 思维创造正能量(聚焦思维-创造价值)

    梳理目标后,认真地执行,会减少很多的麻烦或烦忧。信任是人们前行的基础,相信自我,结合自身所学的知识,安稳前行。身心疲劳会让自身的身心出现各种疾病,身心的健康是稳定一切前提保障,人的内心得以专业细致化生活。人生至此,照耀前行顾头不顾尾,是影响生存的大问题。生存是保持生活重要依据,找准目标,着个解决,是得以保障人民心之所向。勇敢与成熟,是实现稳定安逸的保障。

  • 气血不足老得快3个补气血食疗方法(整日疲倦无力补气血)

    八珍汤是女性调养身体的美容圣品。曾经妇科和内分泌检查确诊为多囊卵巢综合征。察患者面色萎黄,精神欠佳,体态微胖,舌淡,苔白,脉沉细滑。辨证为脾虚湿盛之月经后期病,嘱其中药治疗。患者体态微胖,属于胖多囊,舌淡苔白,脉沉细,提示脾虚湿盛;以八珍汤为基础,加丹参活血调经,加枸杞、黄精健脾益肾,补气养血。上述举案属八珍汤之主治。八珍汤所治之病,其病在心、肝、脾三脏。

  • 手机像素高反而不好是真的吗(手机上的高像素到底是怎么回事)

    首先,手机上的高像素可能是通过多帧拍摄叠加输出的。2014年至2015年,几乎所有国产品牌的拍照手机都搭载了类似技术,例如用1300万像素相机拍摄5000万像素照片的OPPOFind7、用2400万像素相机拍摄1.2亿像素照片的金立E8等。▲OPPO官方微博对Find7高像素模式的宣传。▲金立E8的高像素模式然后,自2018年3月的华为P20Pro开始。

  • 迷你世界沙盒游戏怎么做(迷你世界沙盒游戏首推)

    但是即使是这样,也只能自己1个人乐在其中,没办法和其他人分享,就是因为游戏中没有带录制功能。而在迷你世界最新的版本更新了录制功能,作为沙盒游戏首推,录制功能上线,网友:终于可以拍电影了!上图便是迷你世界版本更新里的宣传图,可以看见已经是确定将推出了这个功能,而宣传语是:留住精彩,乐在分享!

  • 春节美句祝福语(关于春节的祝福语)

    春节美句祝福语?新年快乐祝愿你天天开心,时时快乐,分分精彩,秒秒幸福,今天小编就来聊一聊关于春节美句祝福语?新的一年,新的开始;心的祝福,心的起点。春节点燃了,无数的星辰亮起,天空中写下你的名字,当流星划过时,也把我的思念与祝福一同捎去。当新年的钟声敲响,把我最真诚的祝福献上。春节你要生活超越小康,常葆福乐安康,气魄强健如钢,甜蜜入对成双,不离酱蒜葱姜,吃嘛嘛都香。

  • 杨广是被黑的吗(杨广被黑得到底有多惨)

    宇文泰借鉴鲜卑八部之志,根据战场上的贡献,确立了西魏八柱国12大将军二次开府的府兵系统。为了避免姓氏差异导致内部不和,宇文泰还给军中统兵都赐了鲜卑姓。杨广开创的万国来朝的大业,盛世严口,鼎盛时期一度超过五千万。只可惜杨广还是操之过急,内外举措过度消耗国力,不仅迎来了世家的反扑,还引发了全国范围的农民起义,导致天下大乱。而李渊在此时也逼迫自己拥立的傀儡皇帝杨佑禅让,改国号为唐,隋朝自此正式灭亡。

  • 天津古文化街春节营业时间2023 天津古文化街春节营业时间

    图虫创意-632976723775455620古文化街旅游区又称津门故里,是天津市十大景观之一。这里是天津的发祥地,以中国三大妈祖庙之一“天后宫”为中心,街内集古味、天津味、文化味为一体的店铺林立,富有浓厚的历史味、文化味和天津味。营业时间:9:00-20:00门票价格:免费预约方式:当前无需预约,可直接进入景区参观游玩。

  • 过期月饼能吃吗(月饼过期了还能吃吗)

    食品保质期是指在表明的储存条件下保证食品质量和使用安全的最短期限。包括奶类和乳制品、肉类和肉制品、蔬菜、冰淇淋等食品都是常见的李斯特菌传染媒介。若孕妇不幸感染,本人会出现发热、呕吐、昏迷甚至流产等症状,细菌甚至会经由血液流入胎盘,幸存下来的婴儿也容易罹患脑膜炎,导致智力缺陷或死亡。根据美国疾病控制和预防中心截至8月4日的记录,共计患病25人,24人住院,1人死亡。

  • 怎样判断牛年龄最准(淘汰牛的最佳时机是什么时候)

    不产奶的奶牛可能会是在淘汰名单里排名第一,而肉牛乳房过大、乳房下垂难以喂养小牛的,这些母牛同样需要被淘汰。小牛,有牙的牛的售价位于顶端,售价随着年龄的增大以及牙齿数量的下降而下降。而获取的利润可以用来购买后备母牛以及繁殖母牛甚至3岁的母牛,这些牛已经具备抚育小牛、再孕以及融入畜群的能力。