본문 바로가기
Books/RealMySQL 8.0

3.2 사용자 계정관리

by 두두리안 2021. 10. 2.
728x90

3.2.1 시스템 계정과 일반 계정

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

- 시스템 계정은 MySQL 서버 내부적으로 실행되는 백그라운드 스레드와는 무관하다

- 시스템 계정 = 서버관리자를 위한 계정

- 일반 계정 = 응용프로그램이나 개발 자을 위한 계정

 

시스템 계정은 데이터 베이스나 서버관리와 관련된 중요 작업을 할 수 있다

- 계정관리

- 다른 세션 또는 그 세션에서 실행 중인 쿼리를 강제 종료

- 스토어드 프로그램 생성이 DEFINER를 타 사용자로 설정

 

시스템 계정과 일반 계정의 개념이 도입된 이유?

- SYSTEM_USER 권한을 할당하고 일반 사용자를 위한 계정에는 SYSTEM_USER 권한을 부여하지 않게 하기 위해서

 

-- p55
-- MySQL 서버에는 다음과 같이 내장된 계정들이 있는데 'root'@'localhost' 를 제외한
-- 3개의 계정은 내부적으로 각기 다른 목적으로 사용되므로 삭제되지 않도록 주의하자 
SELECT user, host, account_locked FROM mysql.user WHERE user LIKE 'mysql.%';


3.2.2 계정 생성

MySQL 5.7 버전까지는 GRAND 명령으로 권한의 부여와 동시에 계정 생성이 가능했다

MySQL 8.0 버전부터는 계정의 생성은 CREATE USER 명령, 권한 부여는 GRANT 명령으로 구분

 

계정을 생성할 때는 다음과 같은 옵션을 설정할 수 있다

* 계정의 인증 방식과 비밀번호
* 비밀번호 관련 옵션 (비밀번호 유효기간, 비밀번호 이력 개수, 비밀번호 재사용 불가 기간)
* 기본 역할 (Role)
* SSL옵션
* 계정 잠금 여부

일반적으로 많이 사용되는 옵션을 가진 CREATE USER 명령

-- p56
-- 일반적으로 많이 사용되는 옵션을 가진 CREATE USER 명령
-- MySQL 8.0 부터는 mysql_native_password -> caching_sha2_passowrd
CREATE USER 'user'@'%'
IDENTIFIED WITH 'caching_sha2_passowrd' BY 'password'
REQUIRE NONE
PASSWORD EXPIRE INTERVAL 30 DAY
ACCOUNT UNLOCK
PASSWORD HISTORY DEFAULT
PASSWORD REUSE INTERVAL DEFAULT
PASSWORD REQUIRE CURRENT DEFAULT;

3.2.2.1 IDENTIFIED WITH

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

- IDENTIFIED WITH 뒤에는 반드시 인증 방식을 명시해야 한다

- MySQL 서버의 기본 인증 방식을 사용하고자 한다면 IDENTIFIED WITH BY 'password' 형식으로 명시

 

MySQL 서버에서는 다양한 인증 방식을 프러그인 형태로 제공한다

1. Native Pluggable Authentication
  - 비밀번호에 대한 해시 값을 저장해 두고, 클라이언트가 보낸 값과 해시값이 일치하는지 비교하는 방식
2. Caching SHA-2 Pluggable Authentication
  - 조금 더 보완된 인증방식, 암호화 해시값 생성을 위해 알고리즘을 사용
3. PAM Pluggable Authentication
  - 유닉스나 리눅스 패스워드 또는 LDAP 같은 외부 인증을 사용할 수 있게 해주는 인증방식
4. LDAP Pluggable Authentication
  - 외부 인증을 사용할 수 있게 해주는 방식

- MySQL 5.7 버전은 Native Pluggable Authentication 기본 인증 방식

- MySQL 8.0 버전은 Caching SHA-2 Pluggable Authentication 기본 인증 방식


3.2.2.2 REQUIRE

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


3.2.2.3 PASSWORD EXPIRE

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

PASSWORD EXPIRE : 계정 생성과 동시에 비밀번호의 만료 처리
PASSWORD EXPIRE NEVER : 계정 비밀번호의 만료기간 없음
PASSWORD EXPIRE DEFAULT : 시스템 변수에 저장된 기간으로 비밀번호의 유효기간 설정
PASSWORD EXPIRE INTERVAL n DAY : 비밀번호의 유효 기간을 오늘부터 n일자로 설정

3.2.2.4 PASSWORD HISTORY

- 한번 사용했던 비밀번호를 재사용하지 못하게 설정하는 옵션

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

- 한번 사용했던 비밀번호를 사용하지 못하게 하려면 이전에 사용했던 비밀번호를 MySQL 서버가 기억하고 있어야 한다

-- p59
-- password_history 테이블
SELECT * FROM mysql.password_history;

3.2.2.5 PASSWORD REUSE INTERVAL

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

- 별도로 명시하지 않으면 password_reuse_interval 시스템 변수에 저장

PASSWORD REUSE INTERVAL DEFAULT
- password_reuse_interval 변수에 저장된 기간으로 설정
PASSWORD REUSE INTERVAL n DAY
- n일자 이후에 비밀번호를 재사용할 수 있게 설정

3.2.2.6 PASSWORD REQUIRE

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

- 별도로 명시되지 않으면 password_require_current 시스템 변수의 값으로 설정

PASSWORD REQUIRE CURRENT
- 비밀번호를 변경할 때 현재 비밀번호를 먼저 입력하도록 설정
PASSWORD REQUIRE OPTIONAL
- 비밀번호를 변경할 때 현재 비밀번호를 입력하지 않아도 되도록 설정
PASSWORD REQUIRE DEFAULT
- password_require_current 시스템 변수에 값으로 설정

3.2.2.7 ACCOUNT LOCK / UNLOCK

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

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

'Books > RealMySQL 8.0' 카테고리의 다른 글

4.1 MySQL 엔진 아키텍처(1)  (0) 2021.10.09
3.5 역할(Role)  (0) 2021.10.04
3.4 권한  (0) 2021.10.04
3.3 비밀번호 관리  (0) 2021.10.03