MySQL에서 보안과 사용자 관리가 중요한 이유는 데이터 무결성과 접근 제어를 강화하기 위해서입니다.
특히 MySQL 8.0부터 도입된 역할(Role) 기반 접근 제어(RBAC, Role-Based Access Control) 는
관리자가 사용자 권한을 효율적으로 설정하고 유지할 수 있도록 도와줍니다.
그중에서도 SET DEFAULT ROLE 명령어는
사용자가 로그인할 때 자동으로 활성화되는 역할(Role)을 지정하는 기능을 제공합니다.
이를 활용하면 각 사용자별로 적절한 기본 권한을 설정하고, 필요에 따라 역할을 변경할 수 있습니다.
SET DEFAULT ROLE이란?
SET DEFAULT ROLE은 특정 사용자가 로그인할 때 자동으로 활성화되는 역할을 설정하는 명령어입니다.
MySQL 8.0 이전에는 개별 권한을 직접 부여해야 했지만,
역할(Role) 기능이 도입된 이후 하나의 역할에 여러 개의 권한을 부여하고, 사용자는 그 역할을 활성화하여 권한을 사용할 수 있습니다.
즉, 역할을 설정하고 해당 역할을 기본(Default)으로 활성화하면
사용자가 로그인할 때 자동으로 해당 역할을 사용할 수 있게 됩니다.
SET DEFAULT ROLE 문법
SET DEFAULT ROLE { NONE | ALL | role_name [, role_name] ... }
FOR user_name;
- NONE: 기본적으로 활성화할 역할 없음
- ALL: 사용자가 가진 모든 역할을 기본적으로 활성화
- role_name: 특정 역할을 기본적으로 활성화
- user_name: 기본 역할을 설정할 사용자
SET DEFAULT ROLE 예제
1. 역할(Role) 생성 및 사용자에게 부여
먼저, 역할을 생성하고 사용자에게 부여하는 과정이 필요합니다.
CREATE ROLE admin_role;
CREATE ROLE read_only_role;
위에서 admin_role과 read_only_role 두 개의 역할을 생성했습니다.
이제 각 역할에 적절한 권한을 부여합니다.
GRANT ALL PRIVILEGES ON my_database.* TO admin_role;
GRANT SELECT ON my_database.* TO read_only_role;
- admin_role: my_database의 모든 권한 부여
- read_only_role: my_database에서 SELECT 권한만 부여
2. 사용자를 생성하고 역할(Role) 할당하기
CREATE USER 'john'@'localhost' IDENTIFIED BY 'password123';
GRANT admin_role, read_only_role TO 'john'@'localhost';
이제 john 계정이 admin_role과 read_only_role을 사용할 수 있도록 설정되었습니다.
3. 기본 역할 설정하기 (SET DEFAULT ROLE 사용)
사용자가 로그인할 때 자동으로 read_only_role을 활성화하려면 아래와 같이 설정합니다.
SET DEFAULT ROLE read_only_role FOR 'john'@'localhost';
이제 john이 로그인하면 기본적으로 read_only_role이 활성화됩니다.
4. 기본 역할 변경 (여러 개의 기본 역할 지정 가능)
여러 개의 역할을 기본으로 설정하고 싶다면 다음과 같이 설정할 수 있습니다.
SET DEFAULT ROLE admin_role, read_only_role FOR 'john'@'localhost';
이제 john은 로그인할 때 admin_role과 read_only_role이 자동으로 활성화됩니다.
5. 기본 역할을 없애기 (NONE 사용)
기본적으로 활성화할 역할이 없도록 설정하려면 다음과 같이 합니다.
SET DEFAULT ROLE NONE FOR 'john'@'localhost';
이제 john이 로그인할 때는 아무 역할도 활성화되지 않습니다.
6. 현재 설정된 기본 역할 확인하기
현재 사용자(john)의 기본 역할을 확인하려면 다음 쿼리를 실행합니다.
SELECT user, default_role_host, default_role FROM mysql.default_roles;
이제 john이 어떤 기본 역할을 가지고 있는지 확인할 수 있습니다.
SET DEFAULT ROLE의 장점
- 보안 강화
- 기본적으로 활성화되는 역할을 제한하여 불필요한 권한을 최소화할 수 있음
- 권한 관리 효율화
- 사용자가 직접 권한을 활성화할 필요 없이 로그인할 때 자동으로 설정 가능
- 다중 역할 지원
- 필요에 따라 여러 개의 역할을 기본값으로 설정 가능
- RBAC(역할 기반 접근 제어) 적용 가능
- MySQL에서 RBAC(Role-Based Access Control) 을 활용하여 유연한 권한 관리 가능
SET DEFAULT ROLE 사용 시 주의할 점
- MySQL 8.0 이상에서만 지원됨
- SET DEFAULT ROLE 명령어는 MySQL 8.0 이상에서만 사용 가능
- 역할이 부여되지 않은 사용자는 기본 역할을 설정할 수 없음
- 사용자가 역할을 부여받지 않았다면 SET DEFAULT ROLE을 실행할 수 없음
- SUPER 권한이 없으면 기본 역할을 변경할 수 없음
- 기본 역할을 변경하려면 SUPER 권한이 필요
- 다른 사용자의 기본 역할을 변경하려면 권한이 필요
- SET DEFAULT ROLE을 실행하려면 해당 사용자에 대한 권한이 있어야 함
- 기본 역할이 없으면 명시적으로 활성화해야 함
- SET DEFAULT ROLE NONE으로 설정한 경우, 사용자가 로그인 후 SET ROLE role_name;을 실행해야 해당 역할을 사용할 수 있음
SET DEFAULT ROLE 삭제하기
SET DEFAULT ROLE NONE FOR 'john'@'localhost';
이 명령어를 실행하면 john 계정의 기본 역할이 삭제됩니다.
결론
MySQL SET DEFAULT ROLE을 활용하면 사용자의 로그인 시 자동으로 활성화되는 역할을 설정할 수 있습니다.
이를 통해 보안성을 강화하고, 관리자의 부담을 줄이며, 효율적으로 사용자 권한을 관리할 수 있습니다.
✅ SET DEFAULT ROLE을 사용하면?
✔ 사용자 로그인 시 자동으로 역할 활성화 가능
✔ 여러 개의 기본 역할 설정 가능
✔ 보안성을 강화하면서 권한 관리 간소화
MySQL에서 역할 기반 접근 제어(RBAC)를 제대로 활용하려면,
SET DEFAULT ROLE을 적극적으로 사용하여 사용자 권한을 체계적으로 관리해야 합니다!
참고 자료
공식 가이드 문서: https://dev.mysql.com/doc/refman/8.0/en/set-default-role.html
'DB' 카테고리의 다른 글
[MySQL] ALTER USER 완벽 가이드 사용법(사용자 계정 변경) (0) | 2025.04.01 |
---|---|
[MySQL] DROP USER 완벽 가이드 사용법(사용자 계정 삭제) (0) | 2025.04.01 |
[MySQL] CREATE USER 완벽 가이드 사용법(사용자 생성) (0) | 2025.02.24 |
[MySQL] CREATE SPATIAL INDEX 완벽 가이드 사용법(공간 데이터 검색을 위한 고성능 인덱스) (0) | 2025.02.20 |
[MySQL] CREATE FULLTEXT INDEX 완벽 가이드 사용법(전문 검색[Full-Text Search] 인덱스 활용) (1) | 2025.02.20 |
[MySQL] RESET SLAVE / RESET REPLICA 완벽 가이드 사용법(복제 환경 초기화 및 재설정) (0) | 2025.02.20 |
[MySQL] PURGE BINARY LOGS 완벽 가이드 사용법(바이너리 로그 정리) (0) | 2025.02.20 |
[MySQL] DROP SERVER 완벽 가이드 사용법(원격 서버 삭제) (0) | 2025.02.20 |