[Snowflake] Secure Data Sharing

차지예·2026년 6월 12일

Snowflake

목록 보기
49/49
post-thumbnail

1. Secure Data Sharing 개요

Secure Data Sharing(보안 데이터 공유) 는 내 계정의 데이터베이스 객체를 다른 Snowflake 계정과 공유하는 기능이다.

핵심은 계정 레벨의 SHARE 객체를 통해 공유가 이루어진다는 점이다. SHARE는 데이터 제공자(Data Provider) 가 생성하며, 두 가지 핵심 구성으로 이루어진다.

구성 요소설명
Grants on database objects공유할 객체에 대한 권한 부여
Consumer account definitions공유 대상 소비자 계정 정의

🔑 가장 중요한 개념: Secure Data Sharing에서는 실제 데이터가 복사·전송되지 않는다.
모든 공유는 Snowflake의 services layer(서비스 계층)와 metadata store(메타데이터 저장소) 를 통해 이루어진다.
→ 소비자 계정은 별도의 스토리지 비용이 발생하지 않는다.

공유 가능한 객체 (⭐⭐⭐)

데이터 제공자가 공유할 수 있는 객체는 다음과 같다.

  • Tables (테이블)
  • External tables (외부 테이블)
  • Secure views (보안 뷰)
  • Secure materialized views (보안 구체화 뷰)
  • Secure UDFs (보안 사용자 정의 함수)

📌 암기 포인트: 공유 가능한 객체는 대부분 "Secure" 가 붙는다.
View / Materialized View / UDF는 반드시 Secure 버전이어야 공유 안전.

🔑 모든 공유 객체는 read-only(읽기 전용) 이다. 소비자는 수정·삭제·데이터 추가 불가.

소비자(Data Consumer)는 SHARE로부터 데이터베이스를 생성하며, 이 DB에는 제공자가 부여한 읽기 전용 객체들이 담긴다.

⚠️ 중요: Secure Data Sharing은 VPS(Virtual Private Snowflake) edition에서는 사용 불가하다.


2. Secure Data Sharing 예제 (SQL 흐름)

🅰️ Provider Account (제공자 측)

-- 빈 share 생성 (CREATE SHARE privilege 필요)
CREATE SHARE MY_SHARE;

-- 객체 공유 (권한 부여)
GRANT USAGE ON DATABASE MY_DATABASE TO SHARE MY_SHARE;
GRANT USAGE ON SCHEMA MY_DATABASE.MY_SCHEMA TO SHARE MY_SHARE;
GRANT SELECT ON TABLE MY_DATABASE.MY_SCHEMA.MY_TABLE TO SHARE MY_SHARE;

-- 소비자 계정 추가
ALTER SHARE MY_SHARE ADD ACCOUNTS=TT67B77;

📌 권한 부여 순서 (암기): Database → Schema → Table
상위 객체부터 USAGE를 부여하고, 마지막에 테이블에 SELECT를 부여한다.

🅱️ Consumer Account (소비자 측)

-- 사용 가능한 share 목록 조회 (IMPORT SHARE privilege 필요)
SHOW SHARES;

-- share로부터 데이터베이스 생성 (IMPORT SHARE privilege 필요)
CREATE DATABASE SHARED_DATABASE FROM SHARE GYU889T.MY_SHARE;

-- share 내용 확인 (ACCOUNT ADMIN)
DESC SHARE GYU889T.MY_SHARE;

-- 공유 테이블 조회
SELECT * FROM SHARED_DATABASE.MY_TABLE;

🔑 제공자는 CREATE SHARE / 소비자는 IMPORT SHARE 권한이 필요하다 (아래 4·5절에서 상세).


3. Data Provider (제공자) 핵심 규칙

규칙내용
즉시 반영share에 추가된 객체는 모든 소비자에게 즉시(immediately) 사용 가능
DB 1개 제한하나의 share당 데이터베이스는 단 1개만 추가 가능
개수 제한 없음생성할 수 있는 share 수, share에 추가할 계정 수에 하드 리밋(hard limit) 없음

⚠️ 시험 빈출 에러: share에 속하지 않은 다른 DB의 객체를 추가하려 하면 →
SQL compilation error: Database 'TEST_DB' does not belong to the database that is being shared.
share 1개 = DB 1개 원칙 때문에 발생.


4. Data Provider (제공자) 권한 & 제약

권한

🔑 CREATE SHARE 명령을 실행하려면 CREATE SHARE privilege를 가진 role이 필요하다.

(공식 문서 기준: ACCOUNTADMIN role 또는 global CREATE SHARE privilege를 가진 role 필요)

접근 취소

  • share 또는 share 내 객체에 대한 접근은 언제든지(at any time) 취소(revoke) 가능하다.

Region & Cloud 제약 (⭐⭐⭐)

🔑 share는 데이터 제공자 계정과 동일한 region 및 동일한 cloud provider의 계정에만 부여 가능하다.

📌 다른 region / 다른 cloud의 계정과 공유하려면 Replication(복제) 을 사용해야 한다.
(cross-region 데이터 공유는 Snowflake의 데이터 복제 기능을 활용한다.)


5. Data Consumer (소비자) 핵심 규칙

권한

🔑 share로부터 데이터베이스를 생성하려면 IMPORT SHARE privilege를 가진 role이 필요하다.

(공식 문서 기준: 소비자 계정 관리자는 IMPORTED PRIVILEGES 권한을 role에 부여하여 공유 객체 접근을 허용한다.)

제약 사항 (⭐⭐⭐)

제약내용
객체 생성 불가소비자는 공유 데이터베이스 내부에 객체를 생성할 수 없다
재공유 불가소비자는 공유받은 객체를 다시 공유(reshare)할 수 없다

📌 암기: 소비자는 만들 수도(create) 없고, 다시 나눠줄 수도(reshare) 없다.
→ 오직 읽기(read-only)만 가능.


6. Reader Account (리더 계정)

🔑 Reader Accountnon-Snowflake 고객(Snowflake 미사용 고객) 이 제공자의 데이터에 접근할 수 있게 해준다.

특징내용
용도Snowflake 고객이 아닌 대상과 데이터 공유
데이터 입력 불가reader account는 데이터를 insert하거나 copy할 수 없다 (read-only)
소비 범위 제한reader account는 자신을 생성한 제공자 계정의 데이터만 소비 가능
비용 부담제공자 계정이 reader account에 대한 책임을 지고, 사용량에 대한 비용도 제공자가 부담

📌 시험 핵심: "Snowflake를 쓰지 않는 외부 고객과 공유" = Reader Account
비용은 항상 Provider가 부담한다.

⚠️ 확인 필요: 강의 슬라이드에는 reader account 생성 SQL(CREATE MANAGED ACCOUNT)이나
개수 제한 수치가 없어 본 노트에서는 다루지 않음 (공식 문서에는 별도 존재).


7. Data Exchange (데이터 익스체인지)

🔑 Data Exchange는 계정들이 데이터를 제공·소비할 수 있는 데이터 마켓플레이스의 private 버전이다.

특징내용
본질data marketplace의 private(비공개) 버전
설정 방법Snowflake 계정용 Data Exchange는 이름과 설명을 제공하여 Snowflake support와 함께 설정
관리 주체Data Exchange를 호스팅하는 Snowflake 계정 = Data Exchange Admin
Admin 권한멤버 관리, 멤버를 provider/consumer로 지정, listing 요청 관리

📌 암기: Data Exchange = "내 그룹만 쓰는 비공개 마켓플레이스"
호스팅 계정이 Data Exchange Admin이 되어 모든 것을 관리한다.


한 줄 요약 (One-line Summary)

주제핵심 한 줄
Secure Data Sharing데이터 복사 없이 metadata로 공유 (read-only), VPS edition 불가
공유 가능 객체Table, External table, Secure View/MV/UDF
Share 규칙share당 DB 1개, 계정 추가는 무제한, 객체 추가 시 즉시 반영
Provider 권한CREATE SHARE 필요, 동일 region + 동일 cloud만 공유 가능
Consumer 권한IMPORT SHARE 필요, 객체 생성·재공유 불가
Reader Accountnon-Snowflake 고객용, 비용은 Provider가 부담
Data Exchange마켓플레이스의 private 버전, 호스팅 계정 = Admin

🔑 권한 매핑 암기

  • 제공자(Provider)CREATE SHARE
  • 소비자(Consumer)IMPORT SHARE

🔑 "1·즉시·무제한" 암기 (Provider share 규칙)

  • DB는 1
  • 객체는 즉시 반영
  • 계정·share 수는 무제한

0개의 댓글