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;
role_emp_read
)과 쓰기용 역할(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
으로 활성화를 시켜야 하는 번거로움이 있다.active_all_roles_on_login
시스템 변수를 설정하면 매번 활성화 명령을 하지 않아도 로그인과 동시에 역할이 자동으로 활성화된다.SET GLOBAL active_all_roles_on_login=ON;
user
테이블을 보면 역할과 사용자 계정이 구분 없이 저장되어 있다.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’이기 때문에 로그인 용도로 사용할 수 없게 된다.