MySQL 계정

(2026-02-01)

MySQL 권한


1. MySQL 계정  (Account)계정의 구성 
     - `계정명 (사용자명)`, `호스트명 (클라이언트호스트명,IP주소)`이 하나의 세트로 구성됨
        . 동일한 사용자명이라도 호스트가 다르면 서로 다른 계정으로 취급

  ㅇ 계정의 포멧  :  사용자명@호스트
     - 例) 'user1'@'localhost', 'user2'@'myhost.example.com', 'user3'@'192.168.0.1'
     - 例) 'user4'@'%'  :   모든 호스트 허용 (보안상 주의)
        . IP,호스트명 관계없이 사용자명이 user4인 사용자

  ㅇ 계정의 관리 명령어
     - 계정 생성  :  CREATE USER, SET PASSWORD
     - 계정 삭제  :  DROP USER
     - 계정 이름 변경  :  RENAME USER
     - 암호 설정/변경  :  SET PASSWORD FOR / ALTER USER

  ㅇ 계정의 관리 명령 사례
     - (생성)  CREATE USER `사용자명`@`호스트명` IDENTIFIED BY `암호키`;
        . 사실상, mysql.user 테이블에 한 행(row)을 추가하게 됨
     - (삭제)  DROP USER `사용자명`
        . 사실상, mysql.user 테이블에 해당 행(row)을 삭제하게 됨
     - (명칭변경)  RENAME USER 기존사용자명 TO 신사용자명 : 사용자 계정 이름 변경
     - (암호설정)  SET PASSWORD FOR `username`@`hostname` = PASSWORD(`password`);
     - (암호변경)
         . ALTER USER 'username'@'localhost' IDENTIFIED BY 'password';  (권장)
         . UPDATE mysql.user SET password=PASSWORD('password') WHERE user='username' AND
           host='hostname';  (직접 테이블 수정은 비 권장)
     - (조회)
        . 사용자 계정 목록  :  SELECT user, host FROM mysql.user;
        . 현재 접속 세션  :  SHOW PROCESSLIST;


2. MySQL 권한  (Privilege)

  ㅇ 권한의 `부여`,`제거/철회`,`보기`
      - (권한 부여)  :  GRANT
      - (권한 제거)  :  REVOKE what ON db.table FROM account
      - (권한 확인)  :  SHOW GRANTS [FOR account]

  ※ GRANT (권한 부여), REVOKE (권한 철회) 명령문 형식 
     - GRANT privileges ON what TO 'account id'@'hostname' 
       . privileges  :  권한 내용  (SELECT, INSERT, UPDATE, DELETE, EXECUTE, ALL PRIVILEGES 등)
       . what  :  대상 (Scope)  (db, 테이블, 저장 프로시저 등)
          .. ON db.table  :  특정 db 내 특정 table명
          .. ON db.*  :  특정 db 내 모든 테이블
          .. ON *.*  :  모든 db,테이블들
       . 만일, `WITH GRANT OPTION`을 덧붙이면,
          .. 권한 부여 받은 사용자가, 다른 사용자에게도 자신의 권한을 부여할 수 있게됨 

     - REVOKE privileges ON what FROM 'username'@'hostname' 

  ※ [권한 명령 사례]

  ㅇ 특정 DB 생성 및 전체(모든) 권한 부여
     - CREATE DATABASE IF NOT EXISTS db명;
     - GRANT ALL PRIVILEGES ON db명.* TO 'user'@'localhost';
        . 여기서, ALL 또는 ALL PRIVILEGES : 모든 권한

  ㅇ 특정 테이블 권한 부여 및 철회
     - GRANT SELECT, UPDATE ON db명.테이블명 TO 'user'@'localhost';
     - REVOKE SELECT, UPDATE ON db명.테이블명 FROM 'user'@'localhost';

  ㅇ 함수 실행 권한 부여
     - GRANT EXECUTE ON FUNCTION db명.함수명 TO 'user'@'localhost' ;

  ㅇ 저장 프로시저/함수 덤프용 (즉, SELECT) 권한 부여
     - GRANT SELECT ON mysql.proc TO 'user'@'localhost'; 

  ㅇ 권한 확인
    - SHOW GRANTS FOR 'user'@'localhost';
       . 특정 사용자에게 설정된 GRANT 권한 모두 보기 (결과 그 자체 재사용 가능)
    - SHOW GRANTS;  :  (현재 접속 사용자)


3. MySQL 권한 명시적 적용  :  FLUSH

  ㅇ FLUSH PRIVILEGES; 의미
     - 권한 테이블을 메모리로 다시 로딩
        . MySQL 서버 재시작과 유사한 효과

  ㅇ 필요 및 불필요
     - 언제 필요한가?  :  직접 mysql 권한 테이블을 수정했을 때만 필요
     - 언제 불필요한가?  :  CREATE USER, DROP USER, GRANT / REVOKE, ALTER USER
        . 이 명령들은 자동으로 권한 적용됨


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

  ㅇ mysql.user : MySQL 사용자 권한
     - 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. MySQL 저장 루틴   5. MySQL 백업   6. MySQL 계정   7. MySQL 활용 (기타)   8. MySQL 함수   9. Prepare 문   10. MySQL 이벤트   11.
MySQL 변수,타입,문자셋
  12.
MySQL 저장
 

용어해설 종합 (단일 페이지 형태)

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