[Snowflake] Access Control Overview

차지예·2026년 6월 3일

Snowflake

목록 보기
17/49
post-thumbnail

1. 핵심 개념 (Key Concepts)

Access Control을 이해하기 위한 기본 단위는 Who → Operation → Object 구조다.

개념설명
Securable Object접근 권한을 부여할 수 있는 대상. Grant가 없으면 접근은 기본 거부(deny)
RolePrivilege를 부여받는 주체 (User에게 할당됨)
Privilege객체에 대한 접근 수준을 정의 (예: SELECT, MODIFY, REMOVE)
UserSnowflake가 인식하는 사용자 또는 서비스 계정

2. Access Control 모델 3가지

Snowflake는 아래 세 가지 모델을 혼합하여 사용한다.

2-1. RBAC (Role-based Access Control) ⭐ 핵심

"Privilege → Role → User"

  • Access privilege를 Role에 부여하고, Role을 User에게 할당하는 방식
  • admin_role, sales_role 같은 Role을 만들어 각 User에게 부여
Privilege (SELECT / MODIFY / REMOVE)
    └→ Role (admin_role / sales_role)
        └→ User

RBAC 정의 → "접근 권한(Privilege)은 Role에 부여되고, 그 Role은 다시 User에게 할당된다."


2-2. DAC (Discretionary Access Control)

"객체를 소유한 Role이 해당 객체에 대한 권한을 자유롭게 부여"

객체를 생성한 Role이 자동으로 Owner가 되며, Owner Role은 아래 3가지 권한을 가진다.

  1. 해당 객체에 대한 모든 Privilege 보유 (full privileges)
  2. 다른 Role에게 해당 객체의 접근 권한 부여 가능
  3. 객체의 소유권(Ownership) 이전 가능

DAC 동작 예시 (강의 슬라이드 Image 3 기준):

Role A (owns) → Object
    │
    └(GRANTS)→ Role B
                    └(SELECT)→ Object

DAC 정의 → "각 객체는 소유자(Owner)를 가지며, 소유자는 해당 객체에 대한 접근 권한을 다른 Role에게 부여할 수 있다."


2-3. UBAC (User-based Access Control) ⚠️ 참고 수준

"Privilege를 Role 없이 User에게 직접 부여"

  • Privilege → User 로 직접 연결되는 방식
  • Snowflake는 UBAC를 기본적으로 사용하지 않음
  • User-level 권한 관리는 확장성이 낮고 보안 리스크가 있기 때문
  • USE SECONDARY ROLE = ALL 설정 시에만 User에게 직접 부여된 권한이 고려됨

💡 포인트: Snowflake가 UBAC를 주로 사용하지 않는 이유를 기억할 것
→ User-level privilege 관리는 규모가 커질수록 관리가 어렵고 보안 위험 증가


3. Managed Access Schema (관리형 액세스 스키마)

DAC의 변형으로, 일반 DAC에서 발생할 수 있는 권한 분산 문제를 해결한다.

CREATE SCHEMA my_schema WITH MANAGED ACCESS;
구분일반 Schema (Regular)Managed Access Schema
권한 부여 주체객체 소유자(Object Owner)Schema Owner만 가능
MANAGE GRANTS 보유자가능가능

Managed Access Schema 정의 → "관리형 액세스 스키마에서는 객체 소유자가 권한 부여 결정 권한을 잃는다. 오직 스키마 소유자 또는 MANAGE GRANTS privilege를 가진 Role만이 권한을 부여할 수 있다."


4. Securable Objects 계층 구조

모든 Securable Object는 아래 컨테이너 계층 안에 존재한다.

Organization
    └── Account
            ├── User
            ├── Role
            ├── Database  ──(MODIFY / USAGE)──→ Schema
            │                                       ├── Table
            │                                       ├── View
            │                                       ├── Stage
            │                                       ├── Stored Proc
            │                                       ├── UDF
            │                                       └── Other
            ├── Warehouse
            └── Other

Securable Object에 대한 핵심 규칙:

  • 모든 Securable Object는 단 하나의 Role이 소유 (OWNERSHIP privilege 보유)
  • 소유 Role은 SHOW <object> 명령으로 확인 가능
  • 접근은 Grant가 없으면 기본 거부(deny)

Owning Role의 권한:
1. 해당 객체에 대한 모든 Privilege 기본 보유
2. 다른 Role에게 Privilege를 부여(Grant)하거나 취소(Revoke) 가능
3. 다른 Role로 소유권(Ownership) 이전 가능
4. Owning Role이 공유될 경우 객체에 대한 공동 제어 가능

MANAGE GRANTS 글로벌 Privilege:
이 Privilege를 가진 Role은 모든 객체에 대해 Privilege를 부여하거나 취소할 수 있다.


5. Privilege 예시

Privilege설명
SELECT데이터 조회
MODIFY데이터 수정
REMOVE데이터 삭제
USAGESchema/Warehouse 사용
MODIFY (on Schema)Schema 수정

6. ✅ 포인트 정리

포인트내용
Snowflake 주요 모델RBAC + DAC 혼합 사용
UBAC 사용 여부기본 미사용, 확장성·보안 문제로 RBAC 권장
객체 소유자객체를 생성한 Role이 자동으로 Owner
Managed Access SchemaObject Owner가 아닌 Schema Owner만 권한 부여 가능
기본 접근 정책Grant가 없으면 항상 거부(deny)
MANAGE GRANTS이 Privilege 보유 Role은 모든 객체 권한 관리 가능
SHOW <object>소유 Role 확인 명령어

0개의 댓글