공부, 기록

[MySQL 8] 사용자 및 권한 본문

공부/DATABASE

[MySQL 8] 사용자 및 권한

무는빼주세요 2022. 11. 26. 17:49

 

사용자

MySQL 은 사용자와 연결 호스트를 동시에 식별이 가능.

'user id'@'host name' 으로 계정을 생성한다. 이 계정이 어느 호스트에서도 접근이 가능하게 하고 싶다면

'user id'@'%' 형식으로 호스트 부분에 %(모든 IP 또는 호스트를 의미)를 기입하여 생성.

 

MySQL의 계정은 크게 시스템 계정(ADMIN) 과 일반 계정으로 나눈다.

시스템 계정은 SYSTEM_USER 권한을 가지고 있는 일반 계정으로 볼 수 있다. 시스템 계정은 당연히 일반 계정을 관리 할 수 있지만 일반 계정을 시스템 계정을 생성하거나 관리 할 수 없다.

다음과 같은 세가지 서버 관리와 관계된 중요한 작업은 시스템 계정으로만 사용 가능하다.

  • 계정 관리
  • 세션의 쿼리 강제 종료
  • SP 생성시 DEFINER를 타 사용자로 지정

계정 생성 및 권한 부여의 경우 MS와 동일하게 CREATE USER, GRANT USER 로 나누어져서 사용된다(5버전까진 GRANT로 계정 생성도 가능).

계정 생성의 다양한 옵션들.

  1. IDENTIFIED WITH : 인증 옵션
    1. Native Pluggable Authentication : 단순한 해시(SHA-1) 알고리즘을 통한 패스워드 인증.
    2. Caching SHA-2 Pluggable Authentication : SHA-2 알고리즘을 통한 인증. SSL/TLS 또는 RSA 필요. (기본 인증)
    3. PAM Pluggable Authentication : 유닉스, 리눅스 패스워드 또는 LDAP 같은 외부 인증. 엔터버전에서만 가능
    4. LDAP Pluggable Authentication : LDAP를 통한 외부 인증. 엔터버전에서만 가능.
  2. REQUIRE : 서버에 접속할 때 SSL/TLS 채널의 사용 여부 설정.
  3. PASSWORD EXPIRE : 비밀번호 만료 정책. 따로 미 지정 시 시스템 변수에 지정된 기간으로 지정 됨.
  4. PASSWORD HISTORY : 과거 비밀번호를 재사용하지 못하게 하는 여부의 설정.
  5. PASSWORD REUSE INTERVAL : 비밀번호 재사용 금지 기간 설정
  6. PASSWORD REQIURE: 비밀번호 변경 시 현재 비밀번호의 필요 여부
  7. ACCOUNT LOCK / UNLOCK : 게정 생성 및 수정 시 계정의 잠금 여부

권한

기존 MySQL은 Global, 객체, 동적 권한으로 나누어져 있다.

Global : 데이터베이스나 테이블 이외의 객체에 적용되는 권한. (EX CREATE USER, DROP ROLE SHUTDOWN ..)

객체 : 데이터베이스나 테이블을 제어하는데 필요한 권한. (EX DROP, ALTER, EXECUTE ...)

동적 : MySQL 서버가 시작되면서 동적으로 생성하는 권한. (EX INNODB_EDO_LOG_ARCHIVE, BACKUP_ADMIN ..)

동적 권한으로 인하여 SPUER 라는 권한이 잘게 쪼개지어 관리가 되었다.

권한 부여는 GRANT privilege_list ON target TO 'user'@'host'; 쿼리로 입력가능하다. 권한 항목에 , 로 구분하여 여러 권한을 동시에 부여 가능. Target의 경우 *.* 를 통하여 특정 오브젝트 전체를 부여 가능.

ex ) GRANT EVENT ON *.* TO 'user'@'host'; GRANT EVENT ON dataTable.* TO 'user'@'host';

각 계정에 부여된 권한을 확인하는 방법은 SHOW GRANTS 또는 테이블 조회이다.

 

테이블 명 내용
mysql.user  글로벌 권한
mysql.db DB 단위로 부여된 권한
mysql.tables_priv 테이블 단위 권한
mysql.columns_priv 컬럼 단위 권한
mysql.procs_priv SP 단위 권한
mysql.global_grants 동적 글로벌 권한

Role

8버전 부터 Role 통하여 권한을 묶어서 관리가 가능하다.

CREATE ROLE 과 GRANT 권한 ON TARGER TO ROLE 로 관리.

권한 부여 후 SET ROLE 명령을 통하여 해당 역할을 활성화 해주어야 하는데. 이는 시스템 변수 activate_all_roles_on_login 을 통하여 자동으로 활성화되게 변경 가능.

 

 

참조

Real MySQL 8.0 개정판

'공부 > DATABASE' 카테고리의 다른 글

[SQL Server] 최근 튜닝 일지  (0) 2023.02.05
[MySQL 8] 아키텍처-1  (0) 2022.12.24
[MSSQL/SQL SERVER] 커서  (0) 2022.10.03
[MSSQL/SQL Server] 트랜잭션  (0) 2022.09.24
캐시와 실행계획  (0) 2022.05.21