MySQL 계정

(2022-07-28)

MySQL 권한


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

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

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

     * 例)
        . 사용자 계정 정보 확인 : SELECT user,host FROM mysql.user;
        . 현재 접속중인 사용자 확인 : SHOW PROCESSLIST;

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


2. MySQL 권한  (Privilege)

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

  ※ GRANT (권한 부여), REVOKE (권한 철회) 명령문 형식 
     - GRANT privileges ON what TO 'account id'@'hostname' 
       . privileges : 권한 내용  (select,update,delete,shutdown 등)
       . what : 부여할 권한 레벨  (db, 테이블, 스토어드프로그램 등)
          .. ON db.table : 특정 db 내 특정 table명
          .. ON db.* : 특정 db 내 모든 테이블
          .. ON *.* : 모든 db,테이블들
       . 만일, `WITH GRANT OPTION`을 덧붙이면,
          .. 권한 부여 받은 사용자가, 다른 사용자에게도 자신의 권한을 부여할 수 있게됨 

     - REVOKE privileges ON what FROM 'account id'@'hostname' 

  ※ [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' ;

  ㅇ 현재 접속된 사용자의 권한 표시
     - SHOW GRANTS;


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 저장 프로그램 권한

MySQL
   1. MySQL   2. 마리아 DB   3. MySQL 서버   4. 저장 루틴   5. MySQL 백업   6. MySQL 계정   7. MySQL 활용 (기타)   8. MySQL 함수   9. Prepare 문  


Copyrightⓒ written by 차재복 (Cha Jae Bok)               기술용어해설 후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"