Real My SQL 스터디/사용자 및 권한

사용자 계정 관리

webmaster 2026. 2. 23. 16:49

시스템 계정과 일반 계정

MySQL 8.0부터, 계정은 SYSTEM_USER 권한을 가지고 있느냐에 따라 시스템 계정, 일반 계정으로 구분된다.

  • 시스템 계정: 데이터베이스 서버 관리자를 위한 계정으로, 시스템 계정과 일반 계정을 관리할 수 있다.(SYSTEM_USER 권한을 가짐)
    • 데이터베이스 서버 관리와 중요 작업은 시스템 계정으로만 수행 가능하다.
    • 주요 기능
      • 계정 관리
      • 다른 세션 또는 그 세션에서 실행 중인 쿼리를 강제 종료
      • 스토어드 프로그램 생성 시 Definer를 타 사용자로 설정
  • 일반 계정: 응용 프로그램이나, 개발자를 위한 계정이다.(SYSTEM_USER 권한이 없음)

MySQL에 내장된 계정 같은 경우는 'root'@'localhost'를 제외한 계정은 각 다른 목적으로 사용되니 삭제하지 말자

  • 'mysql.sys'@'localhost': MySQL 8.0부터 기본으로 내장된 sys 스키마의 객체들의 DEFINER로 사용되는 계정
  • 'mysql.session'@'localhost': MySQL 플러그인이 서버로 접근할 때 사용되는 계정
  • 'mysql.infoschema'@'localhost': information_schema에 정의된 뷰의 DEFINER로 사용되는 계정

계정 생성

create user 'user'@'%'
	IDENTIFIED with 'mysql_native_password' by 'test1234'
    require none
    password expire interval 30 day
    account unlock
    password history default
    password reuse interval default
    password require current default;

MySQL 5.7 버전까지는 GRANT 명령으로 권한 부여와 계정 생성이 가능했지만 MySQL 8.0부터는 계정 생성은 CREATE USER 명령으로, 권한 부여는 GRANT 명령으로 구분해서 실행해야 한다.

 

계정 생성 시, 설정할 수 있는 옵션

  • 계정의 인증 방식과 비밀번호
  • 비밀번호 관련 옵션
  • 기본 역할
  • SSL 옵션
  • 계정 잠금 여부

IDENTIFIED WITH

사용자의 인증 방식과 비밀 번호를 설정한다.

set global default_authentication_plugin="mysql_native_password" -- 기본 인증 방식 변경
  • IDENTIFIED WITH 뒤에는 반드시 인증 방식을 명시해야 하며, MySQL 기본 인증 방식을 사용하려면 IDENTIFIED BY 'password' 형식으로 명시해야 한다.
  • 대표 방식
    • Native Pluggable Authentication: MySQL 5.7버전까지 기본으로 사용되는 방식으로 단순 비밀번호에 대한 해시 값을 저장해 두고 클라이언트가 보낸 해시값과 일치하는지 비교하는 방식이다.
    • Caching SHA-2 Pluggable Authentication: MySQL 5.6에 도입되었고, 암호화 해시값 생성을 위해 SHA-2 알고리즘을 사용한다.(해당 인증 방식을 사용하려면 SSL/TLS 또는 RSA 키페어를 사용해야 하므로, 클라이언트에서 접속 시 SSL 옵션을 활성화해야 한다.) -> MySQL 8.0 기본 방식
    • PAM Pluggable Authentication: 유닉스와 리눅스 패스워드 또는 LSAP 같은 외부 인증을 사용할 수 있게 해주는 인증 방식(엔터프라이즈 에디션만 가능)
    • LDAP Pluggable Authentication: LDAP을 이용한 외부 인증을 사용할 수 있게 해주는 인증 방식(엔터프라이즈 에디션만 가능)

REQUIRE

MySQL 서버에 접속할 때 암호화된 SSL/TLS 채널을 사용할 지 여부를 설정한다.

  • 설정하지 않으면 비암호화 채널로 연결하게 된다.
  • Caching SHA-2 Pluggable Authentication 인증 방식을 사용하면 암호화된 채널만으로 MySQL 서버 접근이 가능하다.

PASSWORD EXPIRE

비밀번호의 유효 기간을 설정하는 옵션이다.

  • 별도로 명시하지 않으면 default_password_lifetime 시스템 변수에 저장된 기간으로 유효 기간이 설정된다.
  • 개발자나 데이터베이스 관리자의 비밀번호는 유효 기간 설정하는게 좋으나, 응용 프로그램 접속용 계정에 유효 기간을 설정하는 것은 위험할 수 있다
  • 옵션
    • PASSWORD EXPIRE: 계정 생성과 동시에 비밀번호 만료 처리
    • PASSWORD EXPIRE NEVER: 계정 비밀번호의 만료 기간 없음
    • PASSWORD EXPIRE DEFAULT: default_password_lifetime 시스템 변수에 저장된 기간으로 비밀번호의 유효 기간을 설정
    • PASSWORD EXPIRE INTERVAL n DAY: 비밀번호의 유효 기간을 오늘부터 n일자로 설정

PASSWORD HISTORY

한번 사용했던 비밀번호를 재사용 못하게 설정하는 옵션(mysql DB의 password_history 테이블을 사용한다)

  • PASSWORD HISTORY DEFAULT: password_history 시스템 변수에 저장된 개수만큼 비밀번호의 이력을 저장하며, 저장된 이력에 남아있는 비밀번호는 재사용할 수 없다.
  • PASSWORD HISTORY n: 비밀번호의 이력을 최근 n개까지만 저장하며 저장된 이력에 남아있는 비밀번호는 재사용할 수 없다.

PASSWORD REUSE INTERVAL

한번 사용했던 비밀번호의 재사용 금지 기간을 설정하는 옵션이다.

  • 별도로 설정하지 않으면, password_reuse_interval 시스템 변수에 저장된 기간으로 설정한다.
  • PASSWORD REUSE INTERVAL DEFAULT: password_reuse_interval 변수에 저장된 기간으로 설정
  • PASSWORD REUSE INTERVAL N DAY: N일자 이후에 비밀번호를 재사용할 수 있게 설정

PASSWORD REQUIRE

비밀번호가 만료되어 새로운 비밀번호로 변경할 때 현재 비밀번호를 필요로 할지 말지를 결정하는 옵션

  • 별도로 설정하지 않으면, password_reuse_current 시스템 변수의 값으로 설정된다.
  • PASSWORD REQUIRE CURRENT: 비밀번호를 변경할 때 현재 비밀번호를 먼저 입력하도록 설정
  • PASSWORD REQUIRE OPTIONAL: 비밀번호를 변경할 때 현재 비밀번호를 입력하지 않아도 되도록 설정
  • PASSWORD REQUIRE DEFAULT:password_reuse_current 시스템 변수의 값으로 설정

ACCOUNT LOCK/UNLOCK

계정 생성 시 ALTER USER 명령을 사용해 계정 정보를 변경할 때 계정을 사용하지 못하게 잠글지 여부를 결정

  • ACCOUNT LOCK: 계정을 사용하지 못하게 잠금
  • ACCOUNT UNLOCK: 잠긴 계정을 다시 사용 가능 상태로 잠금 해제

'Real My SQL 스터디 > 사용자 및 권한' 카테고리의 다른 글

역할  (0) 2026.03.02
권한  (0) 2026.02.28
비밀번호 관리  (0) 2026.02.26
사용자 식별  (0) 2026.02.22