2014-06-17 101 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