: MySQL 8.0 버전부터 권한을 묶어서 역할을 사용할 수 있게 됨
: 유저를 생성하듯, 권한을 생성하고 권한을 부여하여 계정마다 역할을 부여할 수 있음
•
역할 생성 및 활성화
CREATE ROLE
role_emp_read,
role_emp_write;
SET ROLE 'role_emp_read';
SQL
복사
•
역할에 권한 부여
GRANT SELECT ON employees.* TO role_emp_read;
GRANT INSERT, UPDATE, DELETE ON employees.* TO role_emp_wirte;
SQL
복사
•
계정 생성
CREATE USER reader@'127.0.0.1' IDENTIFIED BY 'qwerty';
CREATE USER writer@'127.0.0.1' IDENTIFIED BY 'qwerty';
SQL
복사
•
계정에 역할 부여
GRANT role_emp_read TO reader@'127.0.0.1';
GRANT role_emp_read, role_emp_write TO writer@'127.0.0.1';
SQL
복사
SET ROLE을 통해 활성화환 역할은 해당 사용자의 세션이 종료되면 초기화되는데, 이는 SET GLOBAL activate_all_roles_on_login=ON;으로 해결 가능하다.
: 내부적으로 역할은 계정과 동일한 객체로 취급, 단지 하나의 사용자 게정에 다른 사용자 계정이 가진 권한을 병합해서 권한 제어가 가능한 것
: 실제로 mysql의 user 테이블을 살펴보면 실제 권한과 사용자 계정이 구분 없이 저장된 것을 확인할 수 있다.
: CREATE ROLE을 사용하여 역할을 생성하면 호스트 부분이 ‘%’로 생성된다. 계정이랑 동일, 다만 account_locked로 로그인은 불가함
: 역할과 계정이 분리된 것은 데이터베이스 관리의 직무를 분리하여 보안성을 강화시키고자로, 특정 유저가 권한을 생성하여 사용할 수 있게끔하고 계정은 생성할 수 없게 하는 것
: 계정의 기본 역할 또는 역할에 부여된 역할 그래프 관계는 SHOW GRANTS 명령을 사용할 수도 있지만 mysql DB의 권한 관련 테이블을 참조하는 것이 좋다.
저장소 테이블 | 설명 |
mysql.default_roles | 계정별 기본 역할 |
mysql.role_edges | 역할에 부여된 역할 그래프 |