Skip to main content
데이터베이스 서비스 계정은 인증을 위해 별도의 비밀번호 또는 인증서를 사용하는 사용자 계정처럼 단순한 형태일 수도 있습니다. 고급 사용자의 경우 SET ROLE을 사용해 권한 범위를 동적으로 변경할 수 있는 계정을 설정하면, 로그아웃하거나 콘텐츠를 다시 로드하지 않고도 프로필 간에 빠르게 전환할 수 있습니다.

개요

SET ROLE은 세션 동안 서비스 계정의 권한 범위를 동적으로 제한하는 데 사용할 수 있습니다. 이는 사용자의 유효 권한을 활성화된 역할이 부여한 권한으로만 한정하는 방식으로 작동합니다. 이 방식에는 다음과 같은 장점이 있습니다:
  • 서비스 계정에 여러 역할을 할당해 두고, 특정 쿼리에 필요한 역할만 활성화할 수 있습니다.
  • 서비스 계정이 손상되더라도 공격자는 현재 활성화된 역할의 권한만 사용할 수 있습니다.
  • 작업마다 별도의 자격 증명을 사용할 필요 없이, 하나의 계정이 역할을 전환하며 다양한 작업을 수행할 수 있습니다.
  • 개별 사용자를 일일이 수정하지 않고 역할 하나만 변경해도 해당 범주의 서비스 계정 전체에 대한 권한을 업데이트할 수 있습니다.
  • 로그를 통해 쿼리 실행 중 어떤 역할이 활성화되어 있었는지 추적할 수 있어 보안 감사 시 더 명확한 맥락을 제공합니다.
실제로는 다음과 같이 합니다:
  1. 허용된 범위(read_only, maintenance 등)를 나타내는 역할을 설계합니다
  2. 해당 역할을 서비스 계정에 부여합니다
  3. connection 시점에 SET ROLE(또는 role 매개변수)을 통해 활성 역할을 선택하여, 해당 세션에서 수행할 수 있는 작업을 제한합니다

서비스 역할 설정

1

서비스 계정에 역할 부여

먼저 원하는 권한/설정으로 역할을 생성한 다음, 이를 서비스 계정에 부여합니다.
2

`SET ROLE`을 사용해 세션 경계 정의

세션이 시작될 때 서비스 계정은 어떤 역할을 활성화할지 선택합니다.
또는:
SET ROLE은 현재 사용자의 역할을 활성화합니다. 유효 권한은 활성화된 모든 역할 권한의 합집합에 사용자에게 직접 부여된 권한을 더한 것입니다.모든 역할을 비활성화할 수도 있습니다:
또는 여러 역할을 활성화할 수 있습니다:
현재 활성화된 역할은 system.current_roles를 통해 확인할 수 있습니다.
3

서비스 계정의 기본 역할 설정

서비스 계정이 항상 제한된 모드로 시작하도록 하려면 기본 역할을 구성합니다:
또는
4

HTTP를 통해 / 프로그래밍 방식으로 `SET ROLE` 사용

서비스 계정이 HTTP를 통해 연결하는 경우 SET ROLE; SELECT ...를 여러 SQL 문으로 함께 보낼 수 없습니다. 대신 역할을 쿼리 매개변수(query parameter)로 전달하십시오:
?role=…은 해당 SQL 문을 실행하기 전에 SET ROLE read_only_role를 실행하는 것과 같습니다. 여러 role 매개변수는 SET ROLE role 1, role 2처럼 동작합니다.일부 드라이버(예: Python용 ClickHouse Connect)는 각 요청과 함께 전송되는 역할 설정도 제공하며, 서버는 이를 세션 역할로 사용합니다.
마지막 수정일 2026년 7월 23일