Open-Closed Principle

MySQL 사용자 계정 추가 (인증플러그인) 본문

Programming/MySQL

MySQL 사용자 계정 추가 (인증플러그인)

대박플머 2022. 6. 27. 23:25

1. MySQL 사용자 계정 추가 (인증플러그인)

2. MYSQL 사용자 계정 추가 (비밀번호관리/잠금)

기본 예

1
2
3
4
5
6
7
8
CREATE USER 'user'@'%'
IDENTIFIED WITH 'mysql_native_password' BY 'password'
REQUIRE NONE 
PASSWORD EXPIRE INTERVAL 30 DAY 
ACCOUNT UNLOCK 
PASSWORD HISTORY DEFAULT
PASSWORD REUSE INTERVAL DEFUALT 
PASSWORD REQUIRE CURRENT DEFUALT;
cs

1. IDENTIFIED WITH (인증플러그인)

MySQL 서버의 기본 인증 방식을 사용하고자 한다면 IDENTIFIED BY 'password' 형식으로 명시해야 한다. 

- Native Pluggable Authentication : MySQL 5.7 버전까지 기본으로 사용되던 방식으로, 단순히 비밀번호에 대한 해시(SHA-1 알고리즘) 값을 저장해두고, 클라이언트가 보낸 값과 해시값이 일치하는지 비교하는 인증 방식이다. 

- Caching SHA-2 Pluggable Authentication :  MySQL 5.6 버전에 도입되고 MySQL 8.0 버전에서는 조금 더 보완된 인증 방식으로, 암호화 해시값 생성을 위해 SHA-2(256비트) 알고리즘을 사용한다. Native Authentication과 의 가장 큰 차이는 사용되는 암호화 해시 알고리즘의 차이이며, SHA-2 Authentication은 저장된 해시값의 보안에 더 중점을 둔 알고리즘으로 이해할 수 있다. Native Authentication 플러그인은 입력이 동일 해시값을 출력하지만 Caching SHA-2 Authentication은 내부적으로 Salt 키를 활용하며, 추천 번의 해시 계산을 수행해서 결과를 만들어 내기 때문에 동일한 키 값에 대해서도 결과가 달라진다. 이처럼 해시값을 계산하는 방식은 상당히 시간 소모적이어서 성능이 매우 떨어지는데, 이를 보완하기 위해 MySQL 서버는 해시 결괏값을 메모리에 캐시해서 사용하게 된다. 그래서 인증 방식의 이름이 'Caching'이 포함된 것이다. 이 인증 방식을 사용하려면 SSL/TLS 또는 RSA 키페어를 반드시 사용해야 하는데, 이를 위해 클라이언트에서 접속할 때 SSL 옵션을 활성화해야 한다. 

- PAM Pluggable Authentication : 유닉스나 리눅스 패스워드 또는 LDAP(Lightweight Directory Access Protocol) 같은 외부 인증을 사용할 수 있게 해주는 인증 방식으로, MySQL 엔터프라이즈 에디션에서만 사용 가능하다. 

- LDAP pluggable Authentication : LDAP을 이요한 외부 인증을 사용할 수 있게 해주는 인증 방식으로, MySQL 엔터프라이즈 에디션에서만 사용 가능하다. 

 

더보기

참고: MySQL 5.7 버전까지는 Native Authentication이 기본 인증 방식으로 사용됐지만 MySQL 8.0 버전부터는 Caching SHA-2 Authentication이 기본 인증으로 바뀌었다. 하지만 Chching SHA-2 Authentication은 SSL/TLS 또는 RSA 키페어를 필요로 하기 때문에 기존 MySQL 5.7까지의 연결 방식과는 다른 방식으로 접속해야 한다. 그래서 보안 수중은 좀 낮아지겠지만 기존 버전과의 호환성을 고려한다면 Chching SHA-2 Authentication보다는 Native Authentication 인증 방식으로 계정을 생성해야 할 수도 있다. 만약 MySQL 8.0에서도 Native Authentication을 기본 인증으로 하고자 한다면 my.cnf 설정 파일에 추가하면 된다. 

mysql> SET GLOBAL defualt_authentication_plugin='mysql_native_password'

주의

MySQL 서버의 Chching SHA-2 Pluggable Authentication은 SCRAM(Salted Chanllenge Response Authentication Mechanism) 인증 방식을 사용한다. SCRAM 방식은 평문 비밀번호를 이용해서 5000번 이상 암호화 해시 함수를 실행해야 MySQL 서버로 로그인 요청을 보낼 수 있기 때문에 무작위로 비밀번호를 입력하는 무차별 대입 공격(brute-force attack)을 어렵게 만든다. 하지만 이런 인증 방식은 악의가 없는 정상적인 유저나 응용 프로그램의 연결도 느리게 만든다. 물론 허가된 사용자나 응용 프로그램은 정확한 비밀번호를 알고 있기 때문에 해시 함수를 5000번만 실행하면 된다. 하지만 응용 프로그램에서 한 번에 많은 커넥션을 연결하는 경우에는 여전히 응용 프로그램 서버의 CPU 자원을 많이  소모하게 된다는 것을 기억하자. 

MySQL 서버의 SCRAM 인증 방식에서 해시 함수를 몇 번이나 실행(SCRAM lteration count)할지는 caching_sha2_password_digest_rounds 시스템 변수로 설정할 수 있는데, 기본 설정 값은 5000이며 최소 설정 가능값 또한 5000이다. 

 

 

 

2. REQUIRE

MySQL 서버에 접속할 때 암호화된 SSL/TLS 채널을 사용할지 여부를 설정한다. 만약 별도로  서정하지 않으면 비암호화 채널로 연결하게 된다. 하지만 REQUIRE 옵션을 SSL로 설정하지 않았다고 하더라도 Caching SHA-2 Authentication 인증 방식을 사용하면 암호화된 채널만으로 MySQL 서버에 접속할 수 있게 된다.