[MySQL] MySQL에서 caching_sha2_password 특징 및 mysql_native_password 사용하기
[MySQL] MySQL에서 caching_sha2_password 특징 및 mysql_native_password 사용하기
l Version : MySQL 8.0
MySQL은 다양한 계정 인증 플러그인 방식을 지원하고 있다. 현재 공식 매뉴얼에 따르면 13개의 인증 방식을 제공하고 있다.
l https://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html
이번 포스트에서는 다양한 플러그인 중에 MySQL 8버전부터 변경된 인증 방식인 caching sha2_password에 대해서 알아보고 MySQL 8버전에서 이전 버전의 mysql_native_password를 사용하는 방법에 대해서 알아본다.
MySQL 5.7버전까지는 기본 인증 방식이 mysql_native_password이다. MySQL 8버전 부터는 기본 인증방식이 caching_sha2_password 방식으로 변경되었다. mysql_native_password는 계정 비밀번호에 SHA-1 알고리즘을 사용하여 해시된 값을 저장해두고 사용자가 로그인시 입력한 비밀번호의 해시 값을 비교하는 방식이었다. 즉, 해시 값을 저장하여 비교하기 때문에 다른 계정에서 동일한 비밀번호를 사용한다면 MySQL에서는 동일한 해시값을 가지고 있다. 그래서 해시값에 따라 비밀번호를 유추할 가능성이 있는 취약점이 존재한다.
MySQL 8 버전부터 caching_sha2_password를 사용하는데, 이 방식은 비밀번호를 해시하여 저장할 때, salt 키를 사용하여 동일한 비밀번호에 대해서도 서로 다른 해시 값이 생성되도록 하였고, 기존의 암호화 방식보다 강화된 256비트 알고리즘을 사용하였다. 그래서 동일한 비밀번호를 사용하더라도 저장된 해시값이 다르기 때문에 유추의 어렵도록 보안이 강화되었다. 하지만 로그인시 해시값을 비교하기 위한 리소스가 증가하게 되어 빈번한 로그인시 오버헤드에 따른 성능 저하가 발생할 수 있어 이러한 부분을 개선하고자 로그인한 해시값을 서버측 메모리에 캐싱하여 재사용하는 방식으로 연결에 대한 인증 성능을 높였다.
아래 스크립트를 사용하면 현재 운영중인 MySQL의 기본 인증방식을 확인할 수 있다.
mysql> show variables like 'default_authentication_plugin'; |
기본 인증 방식이 변경하려면 my.cnf에서 mysqld에서 기본 인증으로 사용할 플러그인을 명시하여 변경할 수 있다.
[mysqld] default_authentication_plugin=caching_sha2_password |
아래 스크립트는 기본 인증 방식을 변경하는 것은 아니며 MySQL8에서 mysql_native_password를 사용할 수 있도록 플러그인을 추가한 것이다.
authentication-policy=mysql_native_password |
계정을 생성할 때, 사용할 플러그인을 명시하면 해당 플러그인을 사용할 수 있다.
--caching_sha2_password mysql> CREATE USER 'user'@'%' IDENTIFIED WITH caching_sha2_password BY 'password'; --mysql_native_password mysql> CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; |
생성된 계정의 plugin 타입을 조회해 보면 사용된 비밀번호 암호화시 사용된 플러그인을 확인할 수 있다.
mysql> select user, plugin from mysql.user; |
2023-11-13 / Sungwook Kang / http://sungwookkang.com
MySQL, MySQL Authentication Plugin, MySQL Password, 마이에스큐엘, 인증방식 변경, caching_sha2_password, mysql_native_password