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 문  

  1. Top (분류 펼침)      :     1,594개 분류    6,533건 해설

"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"
     [정보통신기술용어해설]       편집·운영 (차재복)