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

관련 문제