我在使用mysql帐户时出现问题,最终我将其缩小为用户密码,该密码包含子字符串'\ Y'。
如果我使用该密码创建用户,则无法使用该帐户登录:
mysql> create user 'test'@'localhost' identified by '\Y';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
$ mysql -u test -p
Enter password:
ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)
这发生在两台不同的机器和两个不同的mysql版本上。
mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.3
mysql Ver 14.14 Distrib 5.6.19, for osx10.9 (x86_64) using EditLine wrapper
为什么会发生这种情况的任何线索?
答案 0 :(得分:2)
创建用户时的序列'\Y'
只是'Y'
。所以用户的密码是“Y”。
在MySQL字符串文字中,only certain backslash-codes have any special meaning。 “\ n”例如是换行符。当你在大多数字符之前放一个反斜杠时,它没有特殊含义,它只是相同的文字字符。所以“\ Y”只是“Y”。
如果要将文字反斜杠作为密码的一部分,则需要转义反斜杠。因此,要创建一个密码,即两个字符“\ Y”,您需要:
mysql> create user 'test'@'localhost' identified by '\\Y';
然后在键入密码时,使用一个反斜杠。
,在交互式输入密码时,反斜杠完全没有意义