MySQL에서 사용자는 단순 ID뿐만 아니라 사용자의 IP 접속 정보도 확인할 수 있다.
MySQL에서 사용자 계정은 ID(사용자명)와 호스트명(IP 또는 도메인명 포함)을 묶어 하나의 계정으로 사용된다.
이러한 이유로 ID는 같지만, 접속 호스트명이 다른 경우 서로 다른 계정으로 인식된다.
아래 두 계정의 ID는 같지만, 호스트명이 다르므로 서로 다른 계정이다.
'asd'@'192.168.110.202' (비밀번호는 1234) 'asd'@'%' (비밀번호는 1234)
또한 ID는 같지만, 호스트명이 다른 경우 호스트 정보가 더 구체적인 계정을 우선하여 인증을 시도한다.
IP가 192.168.110.202인 클라이언트가 MySQL에 접속할 때 아래 순서로 접속을 시도한다.
'asd'@'192.168.110.202' 호스트 정보가 구체적인 계정을 먼저 시도 'asd'@'%' 위 계정 접속이 실패하면, 해당 계정으로 시도
MySQL에서 계정은 SYSTEM_USER 권한 유무에 따라 시스템 계정과 일반 계정으로 나뉜다.
시스템 계정은 SYSTEM_USER 권한을 가진 계정으로 DBA를 위한 계정이다.
시스템 계정은 계정 생성 및 세션 관리 등 DB 서버와 관련된 중요 작업을 수행할 수 있다.
일반 계정은 개발자 및 데이터 분석가 등을 위한 계정이다.
MySQL에서 계정 생성 시 다양한 옵션을 추가하여 상황/작업에 맞는 계정을 생성할 수 있다.
아래는 일반적으로 많이 사용되는 계정 생성 명령문과 옵션이다.
mysql> CREATE USER 'user'@'%' IDENTIFIED WITH '<플러그인 이름>' BY '<비밀번호>' # 인증 방식(인증 플러그인)을 명시적으로 설정하여 비밀번호 설정 IDENTIFIED BY '<비밀번호>' # 기본 인증방식 사용 REQUIRE NONE # SSL 인증서 없이 접속 허용 PASSWORD EXPIRE INTERVAL 30 DAY # 30일 후 비밀번호 만료 ACCOUNT UNLOCK # 계정 장금 해제 상태로 생성 PASSWORD HISTORY DEFAULT # 이전 비밀번호 재사용 제한 횟수 PASSWORD REUSE INTERVAL DEFAULT # 비밀전호 재사용 가능 기간 PASSWORD REQUIRE CURRENT DEFAULT # 비밀전호 변경 시 이전 비밀번호 확인 여부 ;
IDENTIFIED BY '<비밀번호>'IDENTIFIED WITH <플러그인 이름> BY '비밀번호'REQUIRE NONE : SSL 없이도 접속 가능 (기본)REQUIRE SSL : SSL 필수PASSWORD EXPIRE : 즉시 만료 (다음 로그인 시 비밀번호 변경)PASSWORD EXPIRE INTERVAL 30 DAY : 30일 유효기간 설정PASSWORD EXPIRE NEVER : 비밀번호 만료 없음PASSWORD EXPIRE DEFAULT : 시스템 변수를 기준으로 만료 처리default_password_lifetimePASSWORD HISTORY 10 : 최근에 사용한 10개 비밀번호 재사용 금지PASSWORD HISTORY DEFAULT : 시스템 변수를 기준으로 처리password_historyPASSWORD REUSE INTERVAL 365 DAY : 1년 내 재사용 불가PASSWORD REUSE INTERVAL DEFAULT : 시스템 변수를 기준으로 처리password_reuse_intervalPASSWORD REQUIRE CURRENT : 반드시 현재 비밀번호 입력PASSWORD REQUIRE OPTIONAL : 비밀번호 입력 필요 없음PASSWORD REQUIRE CURRENT DEFAULT : 시스템 변수를 기준으로 처리password_require_currentACCOUNT LOCK : 계정 생성 후 접속 차단ACCOUNT UNLOCK : 계정 생성 후 접속 허용 (기본)MySQL에서 비밀번호 설정 시 유효성 체크 규칙을 적용하려면 validate_password 컴포넌트를 사용해야 한다.
비밀번호 유효성 체크 규칙 컴포넌트가 없다면 아래 명령문으로 설치/확인 작업을 수행한다.
[validate_password 컴포넌트 설치]
mysql> INSTALL COMPONENT 'file://component_validate_password';[validate_password 컴포넌트 설치 확인]
mysql> SELECT * FROM mysql.component;
validate_password 컴포넌트를 설치하면 다음과 같은 시스템 변수를 추가로 확인할 수 있다.
validate_password.check_user_name # 사용자명 포함 여부 확인(ON/OFF) validate_password.dictionary_file # 금지 단어 설정 파일 validate_password.length # 최소 길이 설정 validate_password.mixed_case_count # 대소문자 최소 개수 설정 validate_password.number_count # 숫자 최소 개수 설정 validate_password.policy # 정책 설정 (LOW: 길이만, MEDIUM: 길이 + 숫자 + 대소문자 + 특수문자, STRONG: 모든 시스템 변수 검사) validate_password.special_char_count # 특수문자 최소 개수 설정
MySQL 8.0 이후부터 1개 계정에 2개의 비밀번호를 설정할 수 있다.
2개의 비밀번호는 각각 프라이머리(Primary)와 세컨더리(Secondary)로 구분된다.
듀얼 비밀번호를 설정하려면, 비밀번호 변경 명령어에 RETAIN CURRENT PASSWORD 옵션을 추가하면 된다.
# 신규 비밀번호 추가 mysql> ALTER USER 'admin'@'localhost' IDENTIFIED BY '<새로운 듀얼 비밀번호>' RETAIN CURRENT PASSWORD
세컨더리(Secondary) 비밀번호를 삭제는 아래 명령어를 사용하면 된다.
# 세컨더리 비밀번호(ord password) 삭제 mysql> ALTER USER 'admin'@'localhost' DISCARD OLD PASSWORD;