[MySQL] 사용자(user) 계정 및 비밀번호

코린이·2025년 8월 5일

MySQL

목록 보기
5/23

✅ 사용자(user)

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 : 사용자 인증 방식 지정
    • IDENTIFIED BY '<비밀번호>'
    • IDENTIFIED WITH <플러그인 이름> BY '비밀번호'
  • REQUIRE : SSL/TLS 접속 조건 설정
    • SHA-2 인증 방식은 암호화된 채널만으로 MySQL 서버에 접속할 수 있다.
    • REQUIRE NONE : SSL 없이도 접속 가능 (기본)
    • REQUIRE SSL : SSL 필수
  • PASSWORD EXPIRE : 비밀번호 만료 정책 설정
    • PASSWORD EXPIRE : 즉시 만료 (다음 로그인 시 비밀번호 변경)
    • PASSWORD EXPIRE INTERVAL 30 DAY : 30일 유효기간 설정
    • PASSWORD EXPIRE NEVER : 비밀번호 만료 없음
    • PASSWORD EXPIRE DEFAULT : 시스템 변수를 기준으로 만료 처리
    • 시스템 변수 : default_password_lifetime
  • PASSWORD HISTORY : 이전에 사용했던 비밀번호 재사용 제한
    • PASSWORD HISTORY 10 : 최근에 사용한 10개 비밀번호 재사용 금지
    • PASSWORD HISTORY DEFAULT : 시스템 변수를 기준으로 처리
    • 시스템 변수 : password_history
  • PASSWORD REUSE INTERVAL : 이전 비밀번호 재사용까지 최소 기간 설정
    • PASSWORD REUSE INTERVAL 365 DAY : 1년 내 재사용 불가
    • PASSWORD REUSE INTERVAL DEFAULT : 시스템 변수를 기준으로 처리
    • 시스템 변수 : password_reuse_interval
  • PASSWORD REQUIRE CURRENT : 비밀번호 변경 시, 기존 비밀번호 입력을 요구할지 여부 설정
    • PASSWORD REQUIRE CURRENT : 반드시 현재 비밀번호 입력
    • PASSWORD REQUIRE OPTIONAL : 비밀번호 입력 필요 없음
    • PASSWORD REQUIRE CURRENT DEFAULT : 시스템 변수를 기준으로 처리
    • 시스템 변수 : password_require_current
  • ACCOUNT LOCK / UNLOCK
    • ACCOUNT 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		# 특수문자 최소 개수 설정

▶︎ 듀얼(Dual) 비밀번호

MySQL 8.0 이후부터 1개 계정에 2개의 비밀번호를 설정할 수 있다.

2개의 비밀번호는 각각 프라이머리(Primary)와 세컨더리(Secondary)로 구분된다.

  • 프라이머리(Primary) : 최근 설정된 비밀번호(new password)
  • 세컨더리(Secondary) : 이전 비밀번호(ord password)

듀얼 비밀번호를 설정하려면, 비밀번호 변경 명령어에 RETAIN CURRENT PASSWORD 옵션을 추가하면 된다.

# 신규 비밀번호 추가
mysql> ALTER USER 'admin'@'localhost' IDENTIFIED BY '<새로운 듀얼 비밀번호>' RETAIN CURRENT PASSWORD

세컨더리(Secondary) 비밀번호를 삭제는 아래 명령어를 사용하면 된다.

# 세컨더리 비밀번호(ord password) 삭제
mysql> ALTER USER 'admin'@'localhost' DISCARD OLD PASSWORD;

0개의 댓글