MySQL 계정

(2021-06-24)

MySQL 권한


1. MySQL 계정  (Account)계정의 구성 
     - `계정명(사용자명)`, `호스트명(클라이언트호스트명,IP주소)`이 하나의 세트로 구성됨

  ㅇ 계정의 포멧  :  사용자명@호스트
     - 例) 'user1'@'localhost', 'user2'@'myhost.example.com'
     - 例) 'user3'@'%' :  IP,호스트명 관계없이 ID가 user3인 사용자

  ㅇ 계정 관련 주요 명령어들
     - 계정 생성 : CREATE USER, SET PASSWORD
     - 권한 할당, 제거, 확인 : GRANT, REVOKE, SHOW GRANTS
     - 계정 삭제, 이름변경 : DROP USER, RENAME USER

  ㅇ 특정 사용자 계정(이름,암호 등)의 `생성`,`삭제`,`이름변경`
     - (생성)  CREATE USER `사용자명`@`호스트명` IDENTIFIED BY `암호키`;
        . 사실상, mysql.user 테이블에 한 행(row)을 추가하게 됨
     - (삭제)  DROP USER `사용자명`
        . 사실상, mysql.user 테이블에 해당 행(row)을 삭제하게 됨
     - (명칭변경)  RENAME USER 기존사용자명 TO 신사용자명 : 사용자 계정 이름 변경
     - (암호설정)  SET PASSWORD FOR `username`@`hostname` = PASSWORD(`password`);


2. MySQL 권한  (Privilege)

  ㅇ 권한의 `부여`,`제거`,`명시적 적용`,`보기`
      - (권한 부여) : GRANT
      - (권한 제거) : REVOKE what ON db.table FROM account
      - (권한 변경을 명시적으로 적용) : FLUSH PRIVILEGES
      - (권한 정보 보기) : SHOW GRANTS [FOR account]

  ※ GRANT 명령문 형식 
     - GRANT privileges ON what TO 'account id'@'hostname' IDENTIFIED BY 'password'
       . privileges : 권한 (select,update,delete,shutdown 등)
       . what : 부여할 권한 레벨 (db, 테이블, 스토어드프로그램 등)
          .. ON db.table : 특정 db 내 특정 table명
          .. ON db.* : 특정 db 내 모든 테이블
          .. ON *.* : 모든 db,테이블들

  ※ [GRANT 관련 명령문 例]

  ㅇ 특정 db를 생성하고, 해당 db에 대해 특정 사용자에게 모든 권한을 줌
     - CREATE DATABASE IF NOT EXISTS `db명` ;
     - GRANT ALL PRIVILEGES ON `db명`.* TO '사용자명'@localhost ;
        . ALL 또는 ALL PRIVILEGES : 모든 권한

  ㅇ 특정 사용자에게 특정 테이블에 대한 권한 부여,제거
     - GRANT SELECT,UPDATE ON db명.테이블명 TO '사용자명'@'localhost' ;
     - REVOKE SELECT,UPDATE ON db명.테이블명 FROM '사용자명'@'localhost' ; 

  ㅇ 특정 사용자에게 특정 function에 대한 실행 권한 부여
     - GRANT EXECUTE ON FUNCTION `db명`.`함수명` TO '사용자명'@'localhost' ;

  ㅇ 특정 사용자에게 특정 function,procedure에 대한 dump 권한(즉,select 조회) 부여 
     - GRANT SELECT ON mysql.proc TO '사용자명'@'localhost';

  ㅇ 특정 사용자에게 설정된 grant 권한 보기
     - SHOW GRANTS FOR '사용자명'@'localhost' ;


3. MySQL 권한 테이블  (db : mysql)

  ㅇ mysql.user : MySQL 서버에 접속 가능한 사용자 및 전역 권한 정보 (가장 중요)
     - 계정명 및 관련 비밀 정보들이 담겨짐
     - 계정별 권한의 구조를 보여주기 : SHOW CREATE TABLE mysql.user; 
  ㅇ mysql.db : MySQL 데이터베이스 권한
  ㅇ mysql.tables_priv : MySQL 테이블 권한
  ㅇ mysql.columns_priv : 칼럼 권한
  ㅇ mysql.procs_priv : MySQL 저장 프로그램 권한



Copyrightⓒ   차재복 (Cha Jae Bok)