MySQL 5.7 버전까지 권한은 글로벌 권한과 객체 단위의 권한으로 구분됐다
데이터 베이스나 테이블 이외의 객체에 적용되는 권한을 글로벌 권한이라고 하며,
데이터 베이스나 테이블을 제어하는데 필요한 권한을 객체 권한이라 한다
- 객체 권한은 GRANT 명령으로 권한을 부여할 때 반드시 특정 객체를 명시
- 글로벌 권한은 GRANT 명령에서 특정 객체를 명시하지 말아야 한다
예외적으로 ALL은 글로벌과 객체 권한 두 가지 용도로 사용될 수 있다
- 특정 객체에 ALL 권한이 부여되면 해당 객체에 적용될 수 있는 모든 객체 권한 부여
- 글로벌로 ALL이 사용되면 글로벌 수준에서 가능한 모든 권한을 부여
- 책 65p 표 3.1 정적권한, 표 3.2 동적 권한 참조
## 사용자에게 권한을 부여할 때는 GRANT 명령을 사용
## mysql 5.7
## mysql 8.0 에서 Illegal privilege level specified for table 오류가 발생
## Illegal privilege level specified for table -> 테이블에 잘못된 권한 수준이 지정
GRANT privilege_list ON db.table TO 'user'@'localhost';
## mysql 8.0
GRANT ALL privileges on db.table to 'user'@'localhost';
- MySQL 8.0 버전부터는 존재하지 않은 사용자에 대해 GRANT 명령이 실행되면 에러가 발생한다
- 사용자를 먼저 생성하고 GRANT 명령으로 권한 부여
- GRANT OPTION 권한은 다른 권한과 달리 GRANT 명령의 마지막에 WITH FRANT OPTION을 명시해서 부여
- privilege_list 에는 구분자(,)를 써서 앞의 표에 명시된 권한 여러 개를 동시에 명시
- TO 키워드 뒤에는 권한을 부여할 대상 사용자를 명시
- ON 키워드 뒤에는 어떤 DB의 어떤 오브젝트에 권한을 부여할지 결정 (권한범위에 따라 사용하는 방법이 달라짐)
글로벌 권한
## 글로벌 권한
## MySQL 8.0 부터는 SUPER 많은 권한을 주어서 지원하지 않을 예정
## SUPER 권한은 서버환경변수를 바꿀수 있다
GRANT SUPER ON *.* TO 'user'@'localhost';
## ALL 권한은 GRANT 권한을 제외한 가능한 모든 옵션을 부여하는 기능
GRANT ALL ON *.* TO 'user'@'localhost';
- 글로벌 권한은 특정 DB나 테이블에 부여될 수 없기 때문에 글로벌 권한을 부여할때 GRANT 명령의 ON 절에는 항상 *.* 사용
- *.*은 모든 DB의 모든 오브젝트 (테이블, 스토어드, 프로시저나 함수) 를 포함해서 MySQL 서버 전체를 의미한다
- CREATE USER나 CREATE ROLE과 같은 글로벌 권한은 DB 단위나 오브젝트 단위로 부여할 수 있는 권한이 아니다
- 항상 *.* 로만 대상을 사용할수 있다
DB 권한
## DB 권한
GRANT EVENT ON *.* TO 'user'@'localhost';
GRANT EVENT ON employees.* TO 'user'@'localhost';
- DB 권한은 특정 DB에 대해서만 권한을 부여하거나 서버에 존재하는 모든 DB에 대한 권한을 부여할 수 있다
- 위 예제 같이 ON 절에 *.* 이나 employees.* 모두 사용할 수 있다
- 여기서 DB는 DB내부에 존재하는 테이블뿐만 아니라 스토어드 프로그램들도 모두 포함된다
- 하지만 DB 권한만 부여하는 경우에는 (DB 권한은 테이블에 대해 부여할 수 없기 때문에) employees.department 테이블 명시 x
테이블 권한
## 테이블 권한
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.departments TO 'user'@'localhost';
- 첫 번째 예제와 같이 서버의 모든 DB에 대해 권한을 부여하는 것도 가능
- 두 번째 예제와 같이 특정 DB의 오브젝트에 대해서만 권한 부여하는 것도 가능
- 세 번째 예제와 같이 특정 DB의 테이블에 대해서만 권한을 부여하는 것도 가능하다
테이블의 특정 칼럼에 대해서만 권한을 부여하는 경우에는 GRANT 명령의 문법이 달라져야 한다
## 테이블의 특정 칼럼에 대해서 권한을 부여한느 경우
GRANT SELECT,INSERT,UPDATE(dept_name) ON employees.departments TO 'user'@'localhost';
- 권한은 DELETE를 제외한 INSERT, UPDATE, SELECT 3가지
- 각 권한 뒤에 칼럼을 명시하는 형태로 부여
'Books > RealMySQL 8.0' 카테고리의 다른 글
4.1 MySQL 엔진 아키텍처(1) (0) | 2021.10.09 |
---|---|
3.5 역할(Role) (0) | 2021.10.04 |
3.3 비밀번호 관리 (0) | 2021.10.03 |
3.2 사용자 계정관리 (0) | 2021.10.02 |