💡 계정과 사용자
일반적으로 데이터베이스에서는 계정과 사용자라는 말을 혼용하는데, 이번 장에서는 설명과 편의를 위해 두 단어를 다음과 같이 구분해서 사용했다.
- 사용자: MySQL 서버를 사용하는 주체 (사람 또는 응용프로그램)
- 계정: MySQL 서버에 로그인하기 위한 식별자 (로그인 아이디)
SYSTEM_USER
계정을 가지고 있느냐에 따라 구분된다.SYSTEM_USER
권한을 할당하고 일반 사용자를 위한 계정에는 SYSTEM_USER
권한을 부여하지 않게 하기 위해서다.GRANT
명령으로 권한의 부여와 동시에 계정 생성이 가능했다.CREATE USER
명령GRANT
명령CREATE USER
명령은 다음과 같다.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 DEFAULT
PASSWORD REQUIRE CURRENT DEFAULT;
CREATE USER
또는 ALTER USER
명령을 이용해 MySQL 서버의 계정을 생성 또는 변경할 때 연결 방식과 비밀번호 옵션, 자원 사용과 관련된 여러 옵션을 설정할 수 있다.IDENTIFIED WITH
뒤에는 반드시 인증 방식(인증 플러그인의 이름)을 명시해야 한다.IDENTIFIED BY 'password'
형식으로 명시해야 한다.MySQL 설정을 변경하거나
my.cnf 설정 파일에 추가해야 된다.
-- Native Authentication을 기본 인증 방식으로 설정
SET GLOBAL default_authentication_plugin='mysql_native_password"
💡 SCRAM 인증 방식
MySQL의 Caching SHA-2 Pluggable Authentication은 SCRAM(Salted Chanllenge Response Authentication Mechanisma) 인증 방식을 사용한다.
SCRAM 인증 방식은 평문 비밀번호를 입력해서 5000번 이상 암호화 해시 함수를 실행해야 MySQL 서버로 로그인 요청을 보낼 수 있다.
이러한 인증 방식은 무작위로 비밀번호를 입력하는 무차별 대입 공격(Brute-force attack)을 어렵게 만들지만, 악의가 없는 정상적인 유저나 응용 프로그램의 연결도 느리게 만든다.
자세한 내용은 서적과 위키피디아를 참고할 것.
default_password_lifetime
시스템 변수에 저장된 기간으로 유효 기간이 설정된다.default_password_lifetime
시스템 변수에 저장된 기간으로 비밀번호의 유효 기간을 설정SELECT * FROM mysql.password_history;
password_history
시스템 변수에 저장된 개수만큼 비밀번호의 이력을 저장한다.password_reuse_interval
시스템 변수에 저장된 기간으로 설정된다.password_reuse_interval
시스템 변수에 저장된 기간으로 설정password_require_current
시스템 변수의 값으로 설정된다.password_require_current
시스템 변수의 값으로 설정ALTER USER
명령을 사용해 계정 정보를 변경할 때 계정을 사용하지 못하게 잠글지 여부를 결정한다.