2014-06-17 64 views
3

我在使用mysql帐户时遇到了问题,最后我将其缩小到包含子字符串'\ Y'的用户密码。密码中的mysql特殊字符

如果我创建一个使用该密码的用户,我不能用它登录:

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 

任何线索为什么会发生这种情况?

回答

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'; 

然后,当你键入的密码,请使用一个反斜杠。交互式输入密码时,反斜杠没有任何意义,所以不需要转义它。

+0

看起来你是对的,但我不得不说它感觉坏了! – steve