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

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

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

网络故障证明文件作者:王祥爱可生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 时密码存在"#"时,配置时输入密码需要加上双引号。

    推荐阅读
  • 老婆必须陪老公应酬聚餐吗(不去不行吗妻子晚上陪老板应酬喝醉)

    两个人已经结婚一年多时间了,虽然别人对汪伟做家庭妇男有所微词,但是汪伟并没有放在心上,只是安心过好自己的小日子。工资的巨大差异,确实会给丈夫造成不少的压力,虽然嘴上不说,但是对待妻子,汪伟的心情总是有些复杂。汪伟觉得自己的意思已经够明显的了,但是妻子对于丈夫的话却并不同意,她有着自己的想法。

  • 小黄人共享单车押金(们要设押金专用账户)

    市交通委方面表示,目前,注册用户大都交纳了99元至299元的押金,由于注册用户众多,押金总额庞大。中国人民银行营业管理部将加强对企业资金专用账户管理,防控承租人资金风险。市级主管部门统筹各区情况进行业务指导。摩拜单车完全赞同《指导意见》的各项规定,并呼吁相关政府部门强制要求行业内所有企业立即召回、全部销毁不具备卫星定位功能的共享单车,保障用户骑行安全,尤其保障12岁以下儿童安全。

  • 毛毡怎么洗(毛毡清洁窍门)

    用冷水清洗毛毡,因为热水容易破坏羊毛中蛋白质的结构,导致毛毡刀形的改变。另外,在浸泡和洗涤前,可以用纸巾吸收羊毛表面的油脂,以便于清洁。毛毡一定要用手洗,千万不要用洗衣机机洗,以免损坏毛毡的表面形状,影响毛毡的美观。清洁毛毡时,不要用力搓,浸泡后可用手按压。毛毡清洗后,不允许拧干水分。亚麻制品应尽量不要与化纤和毛毡分开洗涤。洗涤时应适当添加一些洗发水和保湿剂,可有效减少毛毡起球现象。

  • 本座级选手是什么意思(本座级选手的解释)

    下面希望有你要的答案,我们一起来看看吧!本座级选手是什么意思本座级选手的意思就是在某个游戏中,实力非常强,无人能够超越他。这种人才能够被称之为本座级选手,比如说lol里面的faker,外号大魔王,他是能够被称之为本座级选手的。现在游戏如此之多,各方面的政策以及体系都非常的完全,有很多职业联赛来让这些选手实现自己的抱负。

  • 川是哪里的车牌号(川R是哪里的车牌号)

    车牌的第一个汉字代表省或直辖市,第一个汉字后面的字母代表市或区。车牌是每辆车合法上路行驶必须具备的东西。不挂车牌开车上路是违法的。车牌有正式车牌和临时车牌。临时车牌是纸质的,这种车牌不需要固定在车身前后。不按规定贴,就是无证驾驶。常见的官方车牌有三种,分别是蓝、绿、黄。大部分家用车使用蓝色牌照和绿色牌照。绿色车牌是新能源汽车,包括纯电动汽车和插电式混合动力汽车。

  • 九号电动滑板车哪款好(九号电动滑板车F25全面评测)

    制动方面,九号电动滑板车F25采用E-ABS电子刹车和碟刹双重刹车,能够在0.1s迅速响应,后轮140毫米直径的大碟盘,可实现高效的制动。此外,九号电动滑板车F25配备的充气胎采用了创新高分子材质增强帘纱层强度,让轮胎的抗刺破性提升12%,改善气胎爆胎短板。

  • 两人牵手唯美句子短(太美好的生活了)

    两人牵手唯美句子短青春是手牵手,坐上了永不回头的火车。伸手需要一瞬间,牵手却要很多年,无论你遇见谁,他都是你生命该出现的人,绝非偶然。也许牵了手的手,前程不一定好走。幸福就是简简单单的依靠,就是手牵手的温柔。每段爱情都是有保质期的,每段爱情都需要用心浇灌,别让爱情不知不觉中如玫瑰凋零。

  • 饥荒汉化版伍迪教学(饥荒伐木人伍迪怎么玩)

    饥荒汉化版伍迪教学伍迪:伍迪的属性伍迪的三围和威尔逊一样,饥饿150,血量150,san200。技能2:他有一个可怕的秘密伍迪是可以变身的!啃咬伤害51,被攻击时免伤75%。变身条件:1:月圆之夜强制变身。背包是等恢复人型的时候用来救命的。不过记得,海狸伍迪虽然能免伤75%,但毕竟不是穿着图勒三件套免伤99%地站撸,连一个木甲的防御都不到,所以一定要记得走位。

  • 2021东莞虎门暑期托管班要多少钱

    对于家庭经济困难的学生,提供相关有效证明后免收服务费用。试点学校全镇三个片区均开展小学生暑期托管试点工作,根据地理位置和学校硬件设施条件,城区片试点学校为东方小学,北栅片试点学校为怀德小学,南栅片试点学校为南栅小学。服务时间第一期:2021年7月21日至8月3日;第二期:2021年8月4日至8月17日。每周星期一至星期五8∶30—17∶30。学生家长自愿申请,可选择报名一期或连续两期。

  • 经常生气的人会得什么病(经常生气的人会得什么病吗)

    中风脑梗人的心与身是密切相关的整体。新发病阶段尤其要控制住不良情绪,以免加重病情。心肌缺氧大量的血液冲向大脑和面部,会使供应心脏的血液减少而造成心肌缺氧。甲状腺结节生气令内分泌系统紊乱,甲状腺分泌的激素增加,久而久之会引起甲亢。同时,甲状腺结节、肿大、甲状腺肿瘤的发生,也与爱生气有密切关系。长此以往,心脏则会受到损害,导致意外心脏事件的发生。血压升高不良的情绪可使血压升高。