Real My SQL 스터디/사용자 및 권한

역할

webmaster 2026. 3. 2. 15:34

MySQL 8.0 버전부터 권한을 묶어서 역할을 사용할 수 있게 되었다.

 

역할 부여

CREATE ROLE
	role_emp_read,
    role_emp_write;

 

권한 부여

Grant select on employees.* to role_emp_read; -- role_emp_read 권한 설정
Grant insert, update, delete on employees.* to role_emp_write; -- role_emp_write 권한 설정

Grant role_emp_read to 'reader'@'localhost'; -- reader 계정에 role_emp_read 역할 설정
Grant role_emp_writer to 'writer'@'localhost'; -- writer 계정에 role_emp_writer 역할 설정


Show Grants; -- 역할 확인
  • Create Role 명령에서 빈 껍데기만 있는 역할을 정의할 수 있다.
  • 실제 권한은 Grant 명령을 통해 부여하면 된다.
  • Show Grants 명령어로 역할 확인할 수 있다.

 

역할 활성화

Set Role 'role_emp_read'; -- 역할 활성화

select current_role() -- 활성화된 역할 조회

Set Global activate_all_roles_on_login=on; -- 로그인 시 역할 활성 자동화 설정
  • 실제 권한을 부여하더라고 조회할 수 없는데, 이는 역할이 활성화되지 않았기 때문이다.
  • Set Role 명령어를 통해 역할을 활성화할 수 있다.
  • 역할 활성화 시, 그 역할이 가진 권한은 사용할 수 있는 상태가 되지만 계정 로그아웃 후 로그인하게 되면 다시 활성화되지 않은 상태로 초기화돼 버린다.
    • MySQL 서버에 로그인 할 때 역할을 자동으로 활성화할지 여부를 activate_all_roles_on_login 시스템 변수로 설정할 수 있다.

사용자 계정과 역할

select user,host,account_locked from mysql.user;

  • mySQL DB의 User 테이블에는 실제 권한과 사용자 계정이 구분 없이 저장되어 있는데, 역할과 계정의 차이는 하나의 사용자 계정에 다른 사용자 계정이 가진 권한을 병합해서 권한 제어할 수 있는 것 밖에 없다.
    • account_locked 컬럼 값 외 차이가 없다.
  • Create Role 명령어로 실제 역할을 추가하게 되면 호스트 부분이 생략되게 되므로, 실제 '%'가 추가된 상태로 계정이 생성이 되게 된다.
    • create role role_emp_read; => create role role_emp_read@'%' 
  • 역할의 호스트 부분은 아무런 영향이 없다.
    • 다만 역할을 다른 계정에 부여하는 것이 아니라 직접 로그인하는 용도로 사용한다면 그때는 역할의 호스트 부분이 중요해진다
MySQL이 Create Role과 Create User를 구분한 이유?
데이터베이스 관리의 직무를 분리할 수 있게 해, 보안을 강화하려고 하는 용도로 사용될 수 있게 하기 위해서다.
실제 역할과 계정은 동일한 데이터베이스에 생성되지만, 역할은 account_locked 컬럼 값이 'Y' 이기 때문에 로그인 용도로 사용할 수 없다.

예를 들어 Create User 명령에 대해서는 권한이 없지만 Create Role 명령만 실행 가능한 사용자는 역할을 생성할 수 있다.

'Real My SQL 스터디 > 사용자 및 권한' 카테고리의 다른 글

권한  (0) 2026.02.28
비밀번호 관리  (0) 2026.02.26
사용자 계정 관리  (0) 2026.02.23
사용자 식별  (0) 2026.02.22