DB

[MySQL] SET DEFAULT ROLE 완벽 가이드 사용법(사용자 권한 관리)

인생아 2025. 2. 20. 13:46
반응형

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의 장점

  1. 보안 강화
    • 기본적으로 활성화되는 역할을 제한하여 불필요한 권한을 최소화할 수 있음
  2. 권한 관리 효율화
    • 사용자가 직접 권한을 활성화할 필요 없이 로그인할 때 자동으로 설정 가능
  3. 다중 역할 지원
    • 필요에 따라 여러 개의 역할을 기본값으로 설정 가능
  4. RBAC(역할 기반 접근 제어) 적용 가능
    • MySQL에서 RBAC(Role-Based Access Control) 을 활용하여 유연한 권한 관리 가능
반응형

SET DEFAULT ROLE 사용 시 주의할 점

  1. MySQL 8.0 이상에서만 지원됨
    • SET DEFAULT ROLE 명령어는 MySQL 8.0 이상에서만 사용 가능
  2. 역할이 부여되지 않은 사용자는 기본 역할을 설정할 수 없음
    • 사용자가 역할을 부여받지 않았다면 SET DEFAULT ROLE을 실행할 수 없음
  3. SUPER 권한이 없으면 기본 역할을 변경할 수 없음
    • 기본 역할을 변경하려면 SUPER 권한이 필요
  4. 다른 사용자의 기본 역할을 변경하려면 권한이 필요
    • SET DEFAULT ROLE을 실행하려면 해당 사용자에 대한 권한이 있어야 함
  5. 기본 역할이 없으면 명시적으로 활성화해야 함
    • 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

반응형