密码中的mysql特殊字符

ste*_*eve 5 mysql special-characters

我在使用 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)
Run Code Online (Sandbox Code Playgroud)

这发生在两台不同的机器和两个不同的 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
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*win 5

'\Y'创建用户时的顺序很简单'Y'。所以那个用户的密码是“Y”。

在 MySQL 字符串文字中,只有某些反斜杠代码具有特殊含义。例如“\n”是一个换行符。当您在大多数字符之前放置反斜杠时,它没有特殊含义,它只是相同的字面字符。所以“\Y”就是“Y”。

如果您希望将文字反斜杠作为密码的一部分,则需要对反斜杠进行转义。因此,要创建一个包含两个字符“\Y”的密码,您需要:

mysql> create user 'test'@'localhost' identified by '\\Y';
Run Code Online (Sandbox Code Playgroud)

然后,当您键入密码时,请使用一个反斜杠。以交互方式键入密码时,反斜杠根本没有任何意义,因此无需对其进行转义。