DB

[MySQL] (권한관리5️⃣) 비밀번호 관리와 인증 보안 강화 전략

인생아 2025. 7. 11. 13:28
반응형

MySQL 보안의 시작은 비밀번호 관리다.
계정 해킹, 내부 유출, 자동화 공격을 막기 위해선 단순한 비밀번호 지정만으로는 부족하다.
MySQL은 다양한 비밀번호 정책과 인증 방식을 제공하며, 이를 잘 활용하면 DB 전체의 보안 수준을 획기적으로 높일 수 있다.

🔐 MySQL의 기본 인증 구조

MySQL 사용자 계정은 mysql.user 테이블에 저장되며, 비밀번호는 해시 처리된 상태로 저장된다.
MySQL 8.0 이후 기본 인증 플러그인은 caching_sha2_password로 변경되었고, 이전 버전에서는 mysql_native_password가 기본이었다.

🔑 비밀번호 인증 플러그인 종류

플러그인 이름 설명
caching_sha2_password 기본값 (MySQL 8.0), 빠르고 안전
mysql_native_password 구버전 호환용, SHA1 기반
sha256_password 더 강력한 보안용, SHA-256 사용

사용자 생성 시 플러그인을 명시할 수 있다.

CREATE USER 'secureuser'@'%' IDENTIFIED WITH caching_sha2_password BY 'StrongPass123!';
반응형

📋 비밀번호 정책 설정 (validate_password)

MySQL에는 비밀번호 복잡도와 보안 수준을 검사하는 플러그인이 있다.
validate_password 플러그인을 활성화하면, 다음 항목을 기준으로 검사한다.

변수 설명
validate_password.length 최소 비밀번호 길이 (기본: 8)
validate_password.mixed_case_count 대/소문자 포함 개수
validate_password.number_count 숫자 포함 개수
validate_password.special_char_count 특수문자 포함 개수
validate_password.policy LOW, MEDIUM, STRONG 정책 선택

활성화 방법:

INSTALL PLUGIN validate_password SONAME 'validate_password.so';

설정 예:

SET GLOBAL validate_password.policy = 'STRONG';
SET GLOBAL validate_password.length = 12;

사용자 생성 시 기준을 충족하지 않으면 오류 발생한다.

⏰ 비밀번호 만료 및 주기 설정

비밀번호를 강제로 주기적으로 변경하도록 설정할 수 있다.
MySQL 8.0 이상에서는 계정 단위로 설정 가능하다.

ALTER USER 'user1'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
  • 90일 후 로그인 시 비밀번호 변경을 요구함

즉시 만료:

ALTER USER 'user1'@'%' PASSWORD EXPIRE;

비밀번호 변경:

ALTER USER 'user1'@'%' IDENTIFIED BY 'NewPass456!';
반응형

🚫 비밀번호 재사용 방지와 잠금 정책은?

MySQL 기본 설정에는 비밀번호 재사용 제한이나 계정 잠금 기능이 포함되지 않지만, MySQL Enterprise Edition 또는 외부 인증 시스템 연동으로 보완할 수 있다.

또한, 비밀번호 변경 시 동일한 해시 값이 재사용되지 않도록 validate_password.reuse_check 같은 커스텀 플러그인을 활용할 수도 있다.

🔍 사용자 인증 관련 정보 확인

SELECT user, host, plugin, password_last_changed, password_expired
FROM mysql.user;
  • plugin: 인증 방식
  • password_expired: 만료 여부 확인 가능

🧠 실무 보안 전략 요약

  • MySQL 8.0 이상에선 caching_sha2_password 사용을 권장
  • 모든 계정에 비밀번호 만료 주기 설정
  • validate_password 플러그인으로 강력한 패스워드 정책 강제
  • 사용자마다 최소 12자 이상, 대소문자+숫자+특수문자 조합 적용
  • 외부 접속 계정은 반드시 강력한 패스워드 + IP 제한 적용
  • 테스트 계정과 기본 사용자 계정은 삭제하거나 무조건 비활성화

✅ 정리

  • 비밀번호 관리는 MySQL 보안의 핵심이다.
  • 플러그인, 정책, 만료, 복잡도 등을 종합적으로 관리해야 한다.
  • 계정 생성 시 인증 플러그인을 지정하고, 정기적인 점검을 수행해야 한다.
  • 강력한 비밀번호는 시스템의 첫 방어선이다.

🔗 공식 문서 참고
MySQL 8.0 Reference Manual - Password Management

반응형