책너두 6기 6일차
백은빈, 이성욱의 Real MySQL8.0 1권 p.65 ~ p.75
내용정리
03 사용자 및 권한
3.4 권한(privilege)
| 글로벌 권한 | 객체 권한 |
|---|---|
| 데이터베이스나 테이블이외의 객체에 적용 | 데이터베이스나 테이블을 제어하는데 필요 |
grant명령에서 특정 객체를 명시X | 권한을 부여할 떄 반드시 특정 객체 명시 |
ALL(또는 all privileges)
글로벌과 객체 권한 두 가지 용도로 사용 될 수 있음.
특정 객체에 ALL 권한이 부여되면 해당 객체에 적용될 수 있는 모든 객체 권한을 부여
글로벌로 ALL이 사용되면 글로벌 수준에서 가능한 모든 권한 부여
| 정적 권한 | 동적 권한 |
|---|---|
| MySQL 서버의 소스코드에 고정적으로 명시돼 있는 권한 | MySQL 서버가 시작되면서 동적으로 생성하는 권한 |
grant명령
각 권한의 범위에 따라 on의 내용이 바뀌어야 한다.
예시 :
grant privilege_list ON db.table TO 'user'@'host';- 사용자를 먼저 생성하고
grant명령으로 권한 부여(없을시 오류 발생) - 옵션 : 명령의 마지막에
with grant option붙인다. - 구분자(,) :
privilege_list에 , 를 통해 권한 여러 개를 동시에 명시할 수 있다 - TO : 권한을 부여할 대상 사용자 명시
- ON : 어떤 오브젝트에 권한을 부여할지 결정
- 사용자를 먼저 생성하고
예시2(글로벌 권한):
grant super on *.* to 'user'@'localhost';*.*: 글로벌 권한은 특정 DB나 테이블에 부여될 수 없기 떄문에 사용. 서버 전체를 의미
예시3(DB 권한) :
grant event on employees.* to 'user'@'localhost'- DB 권한은 특정 DB에 대해서만 부여하거나 서버에 있는 모든 DB에 대해 부여할 수 있기 때문에 ON절에
*.*나 emplyees.* 모두 사용할 수 있다. - DB란 테이블 뿐만 아니라 스토어드 프로그램 모두
employees.department처럼 테이블까지 명시할 수는 없다.
- DB 권한은 특정 DB에 대해서만 부여하거나 서버에 있는 모든 DB에 대해 부여할 수 있기 때문에 ON절에
예시4(테이블 권한)
grant select,insert,update,delete on *.* to 'user'@'localhost';- ``grant select,insert,update,delete on employees.* to ‘user’@’localhost’;`
grant select,insert,update,delete on employees.department to 'user'@'localhost';- 모든 db, 특정 db의 오브젝트, 특정 DB의 특정 테이블에 모두 줄 수있다.
- 테이블의 특정 칼럼에 부여할 수 있는 권한은
INSERT,UPDATE,SELECT DELETE안됨.grant select,insert,update(dept_name) on employees.department to 'user'@'localhost';=>update는 dept_name 칼럼에 대해서만 수행 가능
3.5 역할(Role)
권한과 계정을 묶은 개념, 내부적으로는 똑같은 객체고 차이가 없다.
역할은 그 자체로 사용될 수 없고 계정에 부여해야한다.
역할 정의 => 권한 부여 => 계정 생성 => 계정에 역할 부여 => 역할 활성화
계정 재 로그인시 역할 자동 비활성화 (시스템 변수로 변경 가능)
똑같은데 create role 과 create user가 따로 있을까? : 데이터베이스 관리의 직무를 분리할 수 있게 해서 보안을 강화하는 용도로 사용할 수 있게 하기 위해!
읽고 나서
처음 mysql을 다룰때 이 부분이 가장 헷갈렸는데 이제 편하게 사용할 수 있겠다.