-
3장 3. 권한 및 역할데이터베이스/Real MySQL 8.0 2022. 8. 7. 21:44
권한
권한의 종류는 3가지로 구분됩니다.
- 글로벌 권한 :
데이터베이스나 테이블 이외의 객체에 적용되는 권한
권한을 부여할 때 객체를 명시하지 말아야 합니다. - 객체 권한 :
데이터베이스나 테이블을 제어하는 데 필요한 권한
권한을 부여할 때 특정 객체를 명시해야 합니다. - 동적 권한 :
MySQL 서버가 시작되면서 컴포넌트나 플러그인이 설치되면 생성, 등록되는 권한
MySQL 8.0 버전부터 추가된 권한으로, 위의 권한들은 정적 권한으로 구분됩니다.
- 정적 권한 : MySQL의 서버의 소스코드에 고정적으로 명시되어 있는 권한
권한 부여
GRANT 권한 ON 데이터베이스명.테이블명 TO 'user'@'localhost';
TO 절의 계정에게 ON절의 데이터베이스에 대한 권한을 부여합니다.
권한은 ','를 구분자로 여러 개 등록할 수 있습니다.
글로벌 권한
GRANT SUPER ON *.* TO 'user'@'localhost';
글로벌 권한은 특정 객체에 권한을 부여할 수 없기 때문에
*.* 와 같이 데이터베이스 내의 모든 객체를 지정합니다.
객체 권한
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'user'@'localhost'; # 모든 데이터베이스에 대해서 권한 부여 GRANT SELECT,INSERT,UPDATE,DELETE ON database.* TO 'user'@'localhost'; # 특정 데이터베이스에 대해서 권한 부여 GRANT SELECT,INSERT,UPDATE,DELETE ON database.table TO 'user'@'localhost'; # 특정 데이터베이스의 특정 테이블에 대해서 권한 부여
객체 권한은 다시 DB 권한과 테이블 권한으로 구분됩니다.
DB 권한은 테이블에 대해 부여할 수 없기 때문에 2번째 쿼리까지 사용 가능하며,
테이블 권한은 3번째 쿼리까지 사용 가능합니다.
컬럼 단위로 권한을 부여하게 되면, 하나에만 권한을 부여해도
나머지 컬럼에 대해서도 권한을 체크하기 때문에 성능에 영향이 가게됩니다.
따라서 별도의 뷰를 만드는 방식도 생각해볼 수 있습니다.
역할
MySQL 8.0 버전부터 도입된 기능입니다.
MySQL 서버 내부적으로 역할과 계정은 동일하지만,
보안을 강화하기 위해 역할과 계정을 따로 구분하여 사용합니다.
역할 생성
CREATE ROLE role_emp_read, role_emp_write;
GRANT SELET ON 데이터베이스명.* TO role_emp_read; GRANT INSERT, UPDATE, DELETE ON 데이터베이스명.* TO role_emp_write;
역할이라는 껍데기를 만들고, 역할에 권한을 부여합니다.
역할을 부여할 계정 생성
CREATE USER reader@'127.0.0.1' IDENTIFIED BY 'password'; CREATE USER writer@'127.0.0.1' IDENTIFIED BY 'password';
GRANT role_emp_read TO reader@'127.0.0.1'; GRANT role_emp_read, role_emp_writer TO writer@'127.0.0.1';
계정을 만들고, 권한이 부여된 역할을 생성된 계정에 부여합니다.
역할 활성화
SET ROLE role_emp_read; SET ROLE role_emp_write;
'데이터베이스 > Real MySQL 8.0' 카테고리의 다른 글
4장 1.3 메모리 할당 및 사용 구조 (0) 2022.08.10 4장 1.2 MySQL 스레딩 구조 (0) 2022.08.09 4장 1.1 MySQL의 구조 (0) 2022.08.09 3장 2. 비밀번호 관리 (0) 2022.08.07 3장 1. 사용자 계정 관리 (0) 2022.08.07 - 글로벌 권한 :