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