본문으로 바로가기

Error Message

Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

 

MySQL을 업그레이드하거나 구버전의 DB Dump를 신버전의 MySQL 서버로 옮기면 발생하는 메시지.

MySQL의 password 함수 취약점이 개선되어, 암복호화 되는 값이 다르기 때문에 발생한다.

mysql> SELECT PASSWORD('1234'), OLD_PASSWORD('1234');
+-------------------------------------------+----------------------+
| PASSWORD('1234')                          | OLD_PASSWORD('1234') |
+-------------------------------------------+----------------------+
| *A4B6157319038724E3560894F7F932C8886EBFCF | 446a12100c856ce9     |
+-------------------------------------------+----------------------+

이 경우 어플리케이션 혹은 웹 페이지가 DB Connection이 되지 않는다.

해결 방법은 2가지이다.

 

첫번째 방법. update 쿼리 수행

mysql> USE mysql
mysql> UPDATE user SET password=password('1234') WHERE user='test';
mysql> 
GRANT ALL PRIVILEGES ON testdb.* TO test@'localhost' IDENTIFIED BY '1234'; mysql> FLUSH PRIVILEGES;

GRANT도 다시 해 줘야 하는것 같다.

 

두번째 방법. MySQL 설정 변경

 mysql> set old_passwords=1; -- 혹은 'ON'
 mysql> show variables like '%pass%';
 +-----------------+-------+
 | Variable_name   | Value |
 +-----------------+-------+
 | old_passwords   | ON    |
 | report_password |       |
 +-----------------+-------+

my.cnf 파일을 편집할 때는 [mysqld] 부분에 old_passwords = 1 이라고 설정.

 

Note

MySQL의 DB Connection String 외에 특정 필드를 password 형태로 저장하였던 경우,

모두 update하거나 어플리케이션 혹은 웹 페이지 쪽에서 old_password로 변경해야 한다.

이 작업이 번거로울 경우 서버 설정을 바꾸는 것이 간단하다.