TIL

3.5 역할(Role)

역할 생성

CREATE ROLE 
	role_emp_read,
	role_emp_wirte;

GRANT SELECT ON employyes.* TO role_emp_read;
GRANT INSERT, UPDATE, DELETE ON employees.* TO role_emp_write;

계정에 역할 부여

GRANT role_emp_read TO reader@'127.0.0.1';
GRANT role_emp_write TO writer@'127.0.0.1';

역할 활성화

SET ROLE 'role_emp_read';
SET GLOBAL active_all_roles_on_login=ON;

계정과 역할의 차이

SELECT user, host, account_locked FROM mysql.user;
user host account_locked
role_emp_read % Y
role_emp_write % Y
reader 127.0.0.1 N
writer 127.0.0.1 N
root localhost N

실질적인 차이가 없으면 왜 역할과 계정을 분리했을까? 이는 DB 관리 직무를 분리하여 보안을 강화하는 용도로 사용하기 위해서다. 어떤 사용자가 CREATE USER에는 권한이 없고 CREATE ROLE만 가능하다고 하자. 생성된 역할은 계정과 동일한 객체지만 acoount_locked가 ‘Y’이기 때문에 로그인 용도로 사용할 수 없게 된다.