본문으로 건너뛰기
최종 수정: 에

기본 제공 권한 관리

Doris의 기본 제공 권한 관리는 RBAC (Role-Based Access Control, 역할 기반 접근 제어) 모델을 기반으로 합니다. "권한 → 역할 → 사용자"의 세 계층 구조를 통해 사용자의 식별 정보에 따라 노드, Catalog, 데이터베이스, 테이블, 컬럼, Resource, Workload Group 등의 리소스에 대한 각 사용자의 접근과 작업을 제한합니다.

이 문서에서는 Doris의 기본 제공 권한 관리에 관한 핵심 개념, 동작 방식, 관련 SQL 명령어, 대표적인 권한 설계 시나리오를 설명합니다.

적용 시나리오​

시나리오권장 방식
클러스터 운영(관리자)Admin_priv 또는 Node_priv를 부여하고 기본 제공 역할인 operator / admin을 사용합니다.
데이터 개발(데이터베이스/테이블 생성, 데이터 적재)지정된 데이터베이스/테이블에 CREATE, DROP, ALTER, LOAD, SELECT 권한을 부여합니다.
데이터 쿼리(읽기 전용 접근)지정된 데이터베이스/테이블/컬럼에 Select_priv를 부여합니다.
여러 업무와 테넌트가 공유하는 클러스터각 업무 데이터베이스에 대해 데이터베이스 수준의 Grant_priv를 가진 "업무 관리자" 사용자를 생성하고, 해당 사용자가 자체 업무 사용자를 관리하도록 합니다.
리소스 / 워크로드 격리Usage_priv를 통해 Resource와 Workload Group의 사용을 제어합니다.
민감한 필드 보호(전화번호, 신분증 번호 등)컬럼 수준의 Select_priv를 사용하거나, 데이터 접근 제어와 함께 행 수준 정책을 구성합니다.

핵심 개념​

Doris의 권한 관리는 다음 세 가지 핵심 요소로 구성됩니다.

  • 권한: 특정 리소스 객체에 대한 작업 권한입니다(읽기, 쓰기, 수정 등).
  • 역할: 사용자에게 부여할 수 있는 권한의 집합입니다.
  • 사용자: 작업을 시작하는 주체로, user_name과 host로 고유하게 식별됩니다.

권한​

권한이 적용되는 객체에는 노드, Catalog, 데이터베이스, 테이블, 컬럼, Resource, Workload Group이 포함됩니다. 각 권한은 서로 다른 작업을 허용합니다.

전체 권한 항목​

권한객체 유형설명
Admin_priv전역최고 관리자 권한입니다.
Node_priv전역노드 변경 권한입니다. FE, BE, BROKER 노드의 추가, 제거, 운영 중단 등의 작업이 포함됩니다.
Grant_priv전역, Catalog, 데이터베이스, 테이블, Resource, Workload Group권한 변경 권한입니다. 권한 부여 및 회수, 사용자와 역할의 추가, 제거, 수정 등의 작업을 허용합니다.
다른 사용자/역할에 권한을 부여할 때: 2.1.2 버전 이전에는 현재 사용자에게 해당 수준의 Grant_priv만 있으면 됩니다. 2.1.2 버전부터는 현재 사용자가 부여하려는 리소스 권한도 보유해야 합니다.
다른 사용자에게 역할을 할당할 때는 현재 사용자가 전역 수준의 Grant_priv를 보유해야 합니다.
Select_priv전역, Catalog, 데이터베이스, 테이블, 컬럼Catalog, 데이터베이스, 테이블, 컬럼에 대한 읽기 전용 권한입니다.
Load_priv전역, Catalog, 데이터베이스, 테이블Catalog, 데이터베이스, 테이블에 대한 쓰기 권한입니다. Load, Insert, Delete 등의 작업이 포함됩니다.
Alter_priv전역, Catalog, 데이터베이스, 테이블Catalog, 데이터베이스, 테이블에 대한 수정 권한입니다. 데이터베이스/테이블 이름 변경, 컬럼 추가/제거/수정, 파티션 추가/제거 등의 작업이 포함됩니다.
Create_priv전역, Catalog, 데이터베이스, 테이블Catalog, 데이터베이스, 테이블, 뷰를 생성하는 권한입니다.
Drop_priv전역, Catalog, 데이터베이스, 테이블Catalog, 데이터베이스, 테이블, 뷰를 삭제하는 권한입니다.
Usage_privResource, Workload GroupResource와 Workload Group에 대한 사용 권한입니다.
Show_view_priv전역, Catalog, 데이터베이스, 테이블SHOW CREATE VIEW를 실행하는 권한입니다.

권한 수준​

동일한 권한을 서로 다른 수준에서 부여할 수 있습니다. GRANT 문에 지정된 리소스 경로가 권한의 적용 범위를 결정합니다.

수준권한 부여 경로 예시적용 범위
전역GRANT ... ON *.*.* TO user1모든 Catalog의 모든 데이터베이스 또는 테이블
CatalogGRANT ... ON ctl.*.* TO user1지정된 Catalog의 모든 데이터베이스 또는 테이블
데이터베이스GRANT ... ON ctl.db.* TO user1지정된 데이터베이스의 모든 테이블
테이블GRANT ... ON ctl.db.tbl TO user1지정된 테이블의 모든 컬럼
컬럼GRANT Select_priv(col1,col2) ON ctl.db.tbl TO user1지정된 테이블의 지정된 컬럼. 현재 컬럼 권한은 Select_priv만 지원합니다.
행정책에 따라 정의합니다. 데이터 접근 제어를 참조하세요.사용자가 접근할 수 있는 데이터 행을 제어합니다.
ResourceGRANT USAGE_PRIV ON RESOURCE '%' TO user1Resource 사용. Usage_priv와 Grant_priv만 지원합니다.
Workload GroupGRANT USAGE_PRIV ON WORKLOAD GROUP '%' TO user1Workload Group 사용. Usage_priv와 Grant_priv만 지원합니다.
팁

Admin_priv는 전역 수준에서만 부여하거나 회수할 수 있습니다.

역할​

역할은 권한의 집합입니다. 사용자에게 역할을 할당하면 해당 사용자는 그 역할의 모든 권한을 자동으로 상속받습니다. 이후 역할의 권한이 변경되면 해당 역할을 가진 모든 사용자에게도 변경 사항이 반영됩니다.

기본 제공 역할​

Doris는 기본적으로 다음 두 가지 역할을 생성합니다.

기본 제공 역할기본 권한대표적인 용도
operatorAdmin_priv + Node_priv클러스터 운영, 노드 변경
adminAdmin_priv업무 관리, 데이터 관리

사용자 정의 역할​

CREATE ROLE로 이름이 있는 역할을 생성하고, 자주 사용하는 권한을 조합하여 여러 사용자에게 일괄 부여할 수 있습니다. 이를 통해 권한을 통합 관리하고 회수하기가 쉬워집니다.

사용자​

Doris에서는 user_identity로 사용자를 고유하게 식별합니다. user_identity는 다음 두 부분으로 구성됩니다.

  • user_name: 사용자 이름입니다.
  • host: 사용자 클라이언트가 접속하는 호스트 주소입니다.

권한 관리 동작 방식​

Doris의 권한 시스템은 RBAC 모델을 기반으로 합니다. 사용자는 역할과 연결되고, 역할은 권한과 연결됩니다. 사용자는 역할을 통해 간접적으로 권한을 보유합니다.

┌────────┐        ┌────────┐         ┌────────┐
│ user1 ├────┬───► role1 ├────┬────► priv1 │
└────────┘ │ └────────┘ │ └────────┘
│ │
│ │
│ ┌────────┐ │
│ │ role2 ├────┤
┌────────┐ │ └────────┘ │ ┌────────┐
│ user2 ├────┘ │ ┌─► priv2 │
└────────┘ │ │ └────────┘
┌────────┐ │ │
┌──────► role3 ├────┘ │
│ └────────┘ │
│ │
│ │
┌────────┐ │ ┌────────┐ │ ┌────────┐
│ userN ├─┴──────► roleN ├───────┴─► privN │
└────────┘ └────────┘ └────────┘

위 그림에서 볼 수 있듯이:

  • user1과 user2는 모두 priv1 권한을 보유하며, 이 권한은 role1을 통해 부여됩니다.
  • userN이 보유한 priv1 권한은 role3을 통해, priv2와 privN 권한은 roleN을 통해 부여됩니다. 따라서 userN은 priv1, priv2, privN 권한을 동시에 보유합니다.

권한 상속 및 회수 규칙​

  • 역할이 삭제되면 해당 역할을 가진 사용자는 그 역할의 모든 권한을 자동으로 잃습니다.
  • 사용자의 역할 할당이 해제되면 해당 사용자는 그 역할의 모든 권한을 자동으로 잃습니다.
  • 역할의 권한이 추가되거나 제거되면 해당 역할을 가진 모든 사용자의 권한도 동시에 변경됩니다.

참고 사항​

  • 편의를 위해 Doris는 사용자에게 직접 권한을 부여하는 방식을 지원합니다. 내부 구현에서는 사용자마다 전용 기본 역할을 생성합니다. 사용자에게 직접 권한을 부여하면 실제로는 이 기본 역할에 권한이 부여됩니다.
  • 기본 역할은 삭제하거나 다른 사용자에게 할당할 수 없습니다. 사용자가 삭제되면 해당 사용자의 기본 역할도 자동으로 삭제됩니다.
작업 유형명령어
권한 부여 / 역할 할당GRANT
권한 회수 / 역할 할당 해제REVOKE
역할 생성CREATE ROLE
역할 삭제DROP ROLE
역할 변경ALTER ROLE
현재 사용자의 권한 조회SHOW GRANTS
모든 사용자의 권한 조회SHOW ALL GRANTS
생성된 역할 조회SHOW ROLES
지원되는 모든 권한 항목 조회SHOW PRIVILEGES

권장 사용 방법​

다음은 Doris 권한 시스템을 활용하는 두 가지 대표적인 시나리오입니다.

시나리오 1: 단일 업무 클러스터에서 역할에 따른 업무 분담​

Doris 클러스터의 사용자를 관리자(Admin), 개발 엔지니어(RD), 클라이언트(Client)로 구분합니다.

  • 관리자: 클러스터 전체의 모든 권한을 보유하며 클러스터 구축, 노드 관리 등을 담당합니다.
  • 개발 엔지니어(RD): 데이터베이스와 테이블 생성, 데이터 적재 및 수정 등 업무 모델링을 담당합니다.
  • 클라이언트: 여러 데이터베이스와 테이블에 접근하여 데이터를 조회합니다.

권장 권한 부여 방안은 다음과 같습니다.

  • 관리자: Admin_priv 또는 전역 Grant_priv를 부여합니다.
  • RD: 모든 데이터베이스/테이블 또는 지정된 데이터베이스/테이블에 Create_priv, Drop_priv, Alter_priv, Load_priv, Select_priv를 부여합니다.
  • 클라이언트: 모든 데이터베이스/테이블 또는 지정된 데이터베이스/테이블에 Select_priv를 부여합니다.

서로 다른 역할을 생성하면 여러 사용자에 대한 일괄 권한 부여를 간소화할 수 있습니다.

시나리오 2: 여러 업무를 운영하는 클러스터에서 관리 권한 위임​

하나의 클러스터에서 여러 업무를 운영합니다. 각 업무는 하나 이상의 데이터베이스를 사용하며, 자체 사용자를 관리해야 합니다.

권장 권한 부여 방안: 관리자는 각 업무 데이터베이스에 대해 "업무 관리자" 사용자를 생성하고, 해당 사용자에게 그 데이터베이스에 대한 데이터베이스 수준의 Grant_priv를 부여합니다. 이 사용자는 권한을 부여받은 데이터베이스 범위 내에서만 다른 사용자에게 권한을 부여할 수 있습니다. 이를 통해 업무 간 권한 격리와 자체 관리가 가능합니다.