2014-06-17 4 views
3

J'avais des problèmes avec un compte mysql, et j'ai finalement réduit le mot de passe de l'utilisateur, qui contenait la sous-chaîne '\ Y'.mysql caractères spéciaux dans le mot de passe

Si je crée un utilisateur avec ce mot de passe, je ne peux pas se connecter avec elle:

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) 

Cela se produit sur deux machines différentes et deux versions de MySQL différentes.

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 

Des indices sur pourquoi cela se produit?

Répondre

2

La séquence '\Y' lorsque vous avez créé l'utilisateur est simplement 'Y'. Donc, le mot de passe de cet utilisateur est "Y".

Dans les littéraux de chaîne MySQL, only certain backslash-codes have any special meaning. "\ n" est par exemple un saut de ligne. Lorsque vous mettez une barre oblique inverse avant la plupart des caractères, elle n'a pas de signification particulière, c'est juste le même caractère littéral. Donc un "\ Y" est simplement "Y".

Si vous souhaitez insérer une barre oblique inverse dans le mot de passe, vous devez désactiver la barre oblique inverse. Donc, pour créer un mot de passe qui est les deux caractères « \ Y » vous devez:

mysql> create user 'test'@'localhost' identified by '\\Y'; 

Ensuite, lorsque vous tapez le mot de passe, utilisez une barre oblique inverse. Backslash n'a aucun sens lorsque vous tapez des mots de passe de manière interactive, il n'est donc pas nécessaire d'y échapper.

+0

On dirait que vous avez raison, mais je dois dire qu'il se sent cassé! – steve

Questions connexes