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 저장 프로시저/함수 권한