셰어 만들고 구성하기
셰어 만들고 구성하기
이 주제는 데이터 프로바이더 계정이 셰어(share)를 만들고 구성하고, 셰어를 다른 소비자 계정과 공유하고, 셰어를 지속적으로 유지 관리하는 작업을 설명해요.
본문
주의: Snowflake는 데이터 공유에 참여하는 HIPAA(및 HITRUST) 계정이 서로 서명된 BAA를 갖고 있는지 보장하는 책임이 없어요. 이는 데이터를 공유하는 계정들의 재량에 달려 있어요. 서명된 BAA가 없으면 두 계정 모두, 특히 프로바이더 계정의 HIPAA(및 HITRUST) 규정 준수에 영향을 줄 수 있어요.
Business Critical 계정이 있다면, Snowflake에 비-Business Critical 계정과 Secure Data Sharing을 활성화해 달라고 요청하기 전에 기대하는 데이터 보호 수준을 유지하기 위해 다음을 고려해요.
- 비-Business Critical 계정과 민감한 데이터를 공유하지 마세요.
- 민감도가 낮은 데이터를 저장할 비-Business Critical 계정을 만들고 그 데이터를 비-Business Critical 계정과 공유하는 것을 고려해요.
Business Critical 계정에서 Tri-Secret Secure를 사용하고 다른 계정과 데이터를 공유한다면, Snowflake는 이들 계정의 데이터 접근을 자신의 계정 안에서 접근한 것처럼 취급해요. 특히 소비자 계정에 접근 권한을 부여하려면 Snowflake가 당신의 Snowflake 계정을 호스팅하는 클라우드 플랫폼의 키 관리 서비스에 접근해야 할 수 있어요.
이는 권장 사항일 뿐이며 Snowflake가 강제하지 않아요. 데이터를 공유할지 여부는 항상 데이터 프로바이더의 재량이에요. Snowflake는 잘못 공유된 데이터에 대해 어떤 책임도 지지 않아요.
일반적인 데이터 공유 고려 사항과 사용법
셰어를 만들고 유지 관리할 때 다음 중요한 사용법을 기억해요.
- 리전과 클라우드 플랫폼을 넘어 데이터를 공유할 수 있어요.
- 셰어는 여러 데이터베이스의 데이터를 포함할 수 있어요.
- 셰어에 소비자 계정을 추가하면 셰어를 소비자에게 즉시 사용할 수 있어요.
- 셰어에서 데이터베이스를 만든 소비자에게는 새 행과 수정된 행이 즉시 제공돼요. 이는 소비자가 이미 접근 권한이 있을 때만 일어나요.
- 셰어에 부여된 데이터베이스에서 새로 만들거나 다시 만든 객체는 소비자에게 자동으로 제공되지 않아요. 예를 들어 객체를 삭제한 뒤 다시 만들어도 이름이 같더라도 여전히 새 객체로 간주돼요. 새 객체를 소비자가 사용하게 하려면
GRANT <privilege> … TO SHARE명령으로 객체를 셰어에 명시적으로 추가해야 해요. - 데이터 보안·개인정보 보호를 위해 현재 셰어에서는 보안 뷰(secure view)만 지원돼요. 표준 뷰를 셰어에 추가하면 Snowflake가 오류를 반환해요.
- 데이터베이스의 스트림에 보안 뷰를 만든 뒤 그 뷰를 소비자와 공유하는 것은 권장되지 않아요. 이 시나리오는 다른 계정의 스트림을 수정하는 능력을 요구하며, 이는 지원되지 않는 연산이라 안티패턴이에요. 대신 소비자가 공유하는 테이블과 보안 뷰에 자신의 스트림을 만들게 해요.
- 공유된 테이블에서는 스토리지 수명 주기 정책이 지원되지 않아요. 공유 데이터의 보존 기간을 관리해야 한다면 공유하기 전에 애플리케이션에서 보존 로직을 구현하거나 다른 데이터 관리 전략을 고려해요.
- 직접 셰어는 소비자의 조직 안에서만 재공유할 수 있도록 활성화돼요.
데이터 셰어와 SQL 사용하기
공유할 객체를 준비하는 것은 어떤 역할로든 수행할 수 있어요. 셰어를 만들거나 소비자 계정을 셰어에 추가하는 등 다른 데이터 공유 작업은 ACCOUNTADMIN 역할 또는 전역 CREATE SHARE 권한이 부여된 역할을 필요로 해요.
데이터베이스 역할을 만들고 관리하는 데 DDL을 사용하려면 다음 명령을 사용해요.
CREATE DATABASE ROLEALTER DATABASE ROLEDROP DATABASE ROLESHOW DATABASE ROLES- 공유된 데이터베이스 역할은 객체에 대한 향후 권한 부여(future grants)를 지원하지 않아요.
셰어 안 데이터베이스 객체에 대한 접근을 보거나 부여하거나 회수하는 데 DDL을 사용하려면 다음 명령을 사용해요.
GRANT DATABASE ROLE … TO SHAREREVOKE DATABASE ROLE … FROM SHAREGRANT <privilege> … TO SHAREREVOKE <privilege> … FROM SHARESHOW GRANTS TO SHARE …— 셰어에 부여된 모든 객체 권한을 나열해요.SHOW GRANTS OF SHARE …— 셰어의 모든 계정을 나열하고 셰어를 사용 중인 계정을 나타내요.
셰어 만들기 준비
셰어를 만들기 전에 공유할 Snowflake 객체를 식별하는 것이 좋아요. 공유할 수 있는 객체 유형:
- 데이터베이스
- 테이블
- 동적 테이블
- 외부 테이블
- 외부 관리 및 관리형 Apache Iceberg™ 테이블
- 외부 관리 Delta Lake 테이블(Delta Direct 및 카탈로그 연결 데이터베이스 사용)
- 뷰 — 일반 뷰, 보안 뷰, 보안 구체화된 뷰, 시맨틱 뷰
- Cortex Search 서비스
- 사용자 정의 함수(UDF, 보안 및 비보안)
USER_MODEL,CORTEX_FINETUNED, 또는DOC_AI유형의 모델
이를 위해서는 특히 테이블 중 일부 데이터의 부분집합만 공유하기로 했다면 추가 계획과 관리 작업이 필요할 수 있어요.
데이터베이스와 테이블:
데이터베이스를 공유할 계획이라면 준비가 거의 또는 전혀 필요 없어요. 전체 테이블을 공유할 계획이라면 준비가 필요 없어요. 다만 테이블(또는 테이블 집합)의 데이터를 특정 조건에 따라 또는 소비자 계정별로 필터링하기로 했다면, 테이블에 보안 뷰를 하나 이상 만들어야 해요.
보안 객체(뷰, 구체화된 뷰, UDF):
공유된 데이터베이스의 데이터에 대한 접근을 엄격하게 제어하려면 보안 뷰, 보안 구체화된 뷰, 보안 UDF를 사용해야 해요. 예를 들어 날짜나 다른 조건으로 데이터를 필터링하거나, 단일 셰어를 사용해 서로 다른 소비자 계정을 위해 공유 데이터를 분할할 수 있어요. 보안 객체를 사용하면 기본 테이블과 비즈니스 로직이 노출되지 않도록 보호하면서 데이터에 적용할 세분화 수준을 정할 수 있어요.
보안 객체는 표준 객체와 비슷하게 해당 CREATE <object> 또는 ALTER <object> 명령으로 정의해요. 다만 다음 중요한 사용법에 주의해요.
- 테이블을 정규화된 이름(
<db_name>.<schema_name>.<table_name>)으로 참조하는 보안 객체는 셰어에 포함할 수 있지만, 참조된 데이터베이스 이름이 셰어의 데이터베이스와 일치하는지 확인해야 해요. - 정의에
CURRENT_USER또는CURRENT_ROLE함수를 사용하는 보안 객체는 포함하지 마세요. 이 함수들이 반환하는 컨텍스트 값은 소비자 계정에서 의미가 없으며, 객체를 쿼리·사용할 때 실패하게 해요. - 소비자 계정과 공유할 보안 객체를 정의할 때 핵심적인 추가 단계는 객체가 표시하려는 데이터만 표시하도록 올바르게 구성됐는지 검증하는 거예요. 특히 데이터를 공유하는 계정에 따라 데이터 접근을 제한하려면 중요해요. 이 검증을 돕기 위해 Snowflake는
SIMULATED_DATA_SHARING_CONSUMER세션 파라미터를 제공해요. 이 파라미터는 보안 뷰와 보안 구체화된 뷰만 지원하며 보안 UDF는 지원하지 않아요. 세션에서 이 파라미터를 설정하면 뷰를 공유할 계획인 소비자 계정 중 어느 사용자로서든 보안 뷰를 쿼리하는 것을 시뮬레이션할 수 있어요. 예를 들어 소비자 계정xy12345의 경우:ALTER SESSION SET SIMULATED_DATA_SHARING_CONSUMER = xy12345;
공유 객체의 스트림:
데이터 소비자는 자신의 데이터베이스에 스트림을 만들어 소스 테이블이나 뷰에 이루어진 DML(데이터 조작 언어) 변경을 기록할 수 있어요.
참고: 다음 연산은 지원되지 않아요.
- 보조 소스 객체의 셰어에 추가 전용(append-only) 스트림 만들기
- 다른 계정의 스트림 수정
소비자가 공유된 테이블이나 보안 뷰에 스트림을 만들게 할 수 있어요. 그러려면 먼저 테이블의 데이터 보존 기간을 연장하고, 공유된 테이블이나 공유 뷰의 기본 테이블에서 변경 추적(change tracking)을 활성화해야 해요. CREATE TABLE 또는 ALTER TABLE로 테이블을 만들거나 변경할 때 CHANGE_TRACKING과 DATA_RETENTION_TIME_IN_DAYS 파라미터를 설정해요.
- 변경 추적 활성화: 현재 로컬 테이블에 첫 번째 스트림이 만들어지면 숨겨진 컬럼 한 쌍이 테이블에 자동으로 추가되고 변경 추적 메타데이터를 저장하기 시작해요. 이 변경은 셰어의 소비자가 소스 데이터베이스를 수정할 수 없으므로 공유 테이블에는 적용할 수 없어요. 대신 공유할 테이블의 변경 추적을 활성화하려면 각 테이블에서
ALTER TABLE … CHANGE_TRACKING = TRUE를 실행해요. - 테이블의 데이터 보존 기간 연장: 로컬 테이블의 스트림이 정기적으로 소비되지 않으면 Snowflake는 오래됨(staleness)을 피하기 위해 소스 테이블의 데이터 보존 기간을 일시적으로 연장해요. 공유 테이블의 스트림은 테이블의 데이터 보존 기간을 연장하지 않아요. 마찬가지로 공유 뷰의 스트림도 기본 테이블의 데이터 보존 기간을 연장하지 않아요. 공유 테이블이나 공유 뷰의 기본 테이블에 더 긴 데이터 보존 기간을 수동으로 지정하려면 테이블의
DATA_RETENTION_TIME_IN_DAYS파라미터를 설정해요.
공유 태그 참조:
데이터 공유 프로바이더는 객체에 태그를 설정하고 태그와 태그된 객체를 모두 데이터 공유 소비자와 공유할 수 있어요. 또한 공유 객체의 태그 참조도 소비자가 이용할 수 있어요. 태그 참조를 공유하면 프로바이더가 공유 객체에 대한 추가 컨텍스트(예: 태그 문자열 값에 기반한 테이블이나 컬럼의 데이터 민감도)를 공유할 수 있어요.
소비자는 SQL로 공유 객체의 태그 할당을 보고 공유 객체의 태그 참조를 결정할 수 있어요. 공유 객체의 태그 할당과 참조를 봄으로써 소비자 계정의 데이터 관리자(data steward)가 데이터가 어디서 왔는지, 어떻게 사용되는지 더 포괄적으로 평가할 수 있고, 이 새로운 인사이트는 규정 준수 요건을 충족하는 데 도움이 돼요.
프로바이더는 태그된 객체와 같은 데이터베이스에 태그를 만들고 이 데이터베이스를 공유해야 해요. 데이터베이스를 공유한 뒤 프로바이더가 공유 객체에서 태그를 해제하면 태그 할당 변경이 소비자 계정에도 나타나요. 태그가 해제되면 소비자는 그 태그로 공유 객체를 추적할 수 없어요. 태그를 해제함으로써 프로바이더는 객체가 실수로 태그된 경우 데이터 재량권을 유지할 수 있어요.
태그 상속은 공유 데이터베이스의 태그된 객체에 적용돼요. 예를 들어 프로바이더가 공유 데이터베이스의 스키마에 태그를 설정하면 그 스키마 안의 객체와 컬럼도 태그돼요. 다만 소비자는 정보 스키마(Information Schema)의 TAG_REFERENCES 테이블 함수로 프로바이더가 태그를 처음 설정한 위치를 확인할 수 없어요. Snowflake는 태그가 처음 설정된 위치를 드러내지 않음으로써 데이터 프로바이더를 보호하기 위해 테이블 함수 출력의 LEVEL 컬럼 값을 숨겨요.
중요: 공유 태그는 읽기 전용이에요. 소비자는 자신의 계정 객체에 공유 태그를 설정할 수 없어요.
프로바이더 옵션:
태그를 공유하려면 프로바이더는 다음 옵션을 사용할 수 있어요.
- SQL로 셰어가 태그에 접근하게 하고 소비자가 공유 객체에서 공유 태그의 할당을 보게 해요. 프로바이더는 각 태그에
READ권한을 부여해 태그를 소비자가 사용 가능하게 해야 해요.GRANT READ ON TAG mydb.tags.tag1 TO SHARE my_share; GRANT USAGE ON DATABASE mydb TO SHARE my_share; GRANT USAGE ON SCHEMA mydb.tags TO SHARE my_share; - 데이터베이스 역할을 만들고, 태그에 대한
READ권한을 데이터베이스 역할에 부여한 뒤, 데이터베이스 역할을 셰어에 부여해요. 데이터베이스 역할에는 태그를 저장하는 스키마에 대한USAGE권한도 필요해요.GRANT READ ON TAG mydb.tags.tag1 TO DATABASE ROLE my_db_role; GRANT USAGE ON SCHEMA mydb.tags TO DATABASE ROLE my_db_role; GRANT DATABASE ROLE my_db_role TO SHARE my_share;
소비자 옵션:
소비자 계정에서 공유 태그를 보려면 소비자는 다음 옵션을 사용할 수 있어요.
ACCOUNTADMIN역할 사용 — 소비자 계정 관리자는 프로바이더가 제공하는 공유 태그를 볼 수 있어요.IMPORTED PRIVILEGES가 있는 역할 사용 — 셰어에서 만든 데이터베이스에 대한IMPORTED PRIVILEGES가 부여된(또는 상속하는) 계정 역할은 프로바이더가 제공하는 공유 태그를 볼 수 있어요.GRANT IMPORTED PRIVILEGES ON DATABASE db_share TO ROLE db_share_role;- 공유 데이터베이스 역할 사용 — 프로바이더가 태그에 대한
READ권한을 데이터베이스 역할에 부여하고 그 역할을 공유했다면, 소비자는 공유 데이터베이스 역할을 자신의 계정 역할에 부여할 수 있어요.GRANT DATABASE ROLE my_db_role TO ROLE consumer_analyst_role;
소비자 계정에서 SQL로 프로바이더가 공유하는 태그, 태그 참조, 태그된 객체를 볼 수 있어요.
- 명령:
SHOW TAGS - 함수:
SYSTEM$GET_TAG,TAG_REFERENCES,TAG_REFERENCES_ALL_COLUMNS
현재 소비자 계정에서 다음 옵션으로는 프로바이더가 공유하는 태그·태그 참조·태그된 객체를 볼 수 없어요.
- Snowsight
- Account Usage
TAG_REFERENCES뷰 - Account Usage
TAG_REFERENCES_WITH_LINEAGE테이블 함수
셰어 만들기
셰어를 만들려면 ACCOUNTADMIN 역할 또는 CREATE SHARE 전역 권한이 부여된 역할을 사용해야 해요.
Snowsight로 셰어 만들기:
Snowsight에서 데이터를 공유하는 방법은 여러 가지예요.
- Provider Studio로 특정 소비자에게 또는 Snowflake Marketplace에 공개적으로 listing을 제공해요.
- 데이터 익스체인지에 listing을 게시해요.
- 리전 안 소비자 계정과 데이터를 공유하는 직접 셰어를 만들어요.
다른 데이터베이스의 객체를 참조하는 보안 뷰를 추가해야 하는 셰어를 만든다면 SQL로 셰어를 만들어야 해요. 직접 셰어를 만들려면:
- Snowsight에 로그인해요.
- 탐색 메뉴에서 Data sharing » External sharing을 선택해요.
- Shared by your account 탭을 선택해요.
- Share » Create a Direct Share를 선택해요.
- Share Data 대화상자에서 + Select Data를 선택한 뒤:
- 소스 데이터베이스를 선택해요.
- 소스 데이터베이스에서 대상 객체 하나 이상을 선택해요.
- 선택적으로 셰어를 위해 생성된 Secure Share Identifier를 갱신해요.
- 선택적으로 Description을 입력해요.
- 남은 텍스트 상자에 계정 로케이터(account locator)를 입력해요. 계정 로케이터 일부를 입력하면 일치하는 모든 계정이 나열돼요. 계정을 추가하려면 필요한 만큼 반복해요. 셰어에는 같은 리전 안의 계정만 추가할 수 있어요.
- Create Share를 선택해요.
활성 소비자가 있는 직접 셰어를 listing으로 변환하려면 직접 셰어를 listing으로 변환 문서를 참고해요.
SQL로 셰어 만들기:
SQL로 셰어를 만들려면:
CREATE SHARE명령으로 빈 셰어를 만들어요.GRANT <privilege> … TO SHARE명령으로 셰어에 데이터베이스를 추가하고, 특정 데이터베이스 객체(스키마, 테이블, 보안 뷰)에 대한 접근을 셰어에 선택적으로 부여해요.ALTER SHARE명령으로 셰어에 계정 하나 이상을 추가해요.
참고: 다음 단계는 프로바이더 계정
prvdr1이xy12345,yz23456두 소비자 계정과 데이터를 공유한다고 가정해요.
DDL로 셰어 만들고 관리하기:
셰어를 만들고 관리하려면 다음 DDL 명령을 사용해요.
CREATE SHAREALTER SHAREDROP SHAREDESCRIBE SHARE— 셰어의 모든 객체를 설명해요.SHOW SHARES— 모든 셰어와 각 셰어에 지정된 소비자 계정을 나열해요.
1단계: 빈 셰어 만들기
다음 예시는 sales_s라는 빈 셰어를 만들어요.
CREATE SHARE sales_s;
2단계: 데이터베이스와 객체에 대한 권한을 셰어에 부여하기
객체(데이터베이스, 스키마, 테이블, 보안 뷰 등)를 셰어에 추가해요. 이 객체들에 대한 권한을 데이터베이스 역할을 통해 셰어에 추가하거나, 객체에 대한 권한을 셰어에 직접 부여할 수 있어요.
옵션 1 — 데이터베이스 역할을 만들고, 다음 객체(sales_db 데이터베이스, aggregates_eula 스키마, aggregate_1 테이블)에 대한 권한을 데이터베이스 역할에 부여한 뒤, 그 역할을 이전 단계에서 만든 sales_s 셰어에 부여하는 예시예요.
CREATE DATABASE ROLE sales_db.dr1;
GRANT USAGE ON DATABASE sales_db TO DATABASE ROLE sales_db.dr1;
GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO DATABASE ROLE sales_db.dr1;
GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO DATABASE ROLE sales_db.dr1;
GRANT USAGE ON DATABASE sales_db TO SHARE sales_s;
GRANT DATABASE ROLE sales_db.dr1 TO SHARE sales_s;
옵션 2 — 객체를 셰어에 포함하려면 각 객체에 대한 권한을 부여해요. 권한을 부여할 때는 컨테이너 안 객체에 대한 권한보다 컨테이너 객체에 대한 권한을 먼저 부여해요. 예를 들어 데이터베이스 안 스키마에 대한 권한을 부여하기 전에 데이터베이스에 대한 권한을 먼저 부여해요. 그리고 이 작업은 계정을 셰어에 추가하기 전에 수행해요. 계정을 추가하기 전에 데이터베이스에 대한 권한을 부여하지 않으면 오류가 발생해요. 다음 예시는 이전 단계에서 만든 sales_s 셰어에 다음 객체(sales_db 데이터베이스, aggregates_eula 스키마, aggregate_1 테이블)에 대한 권한을 부여해요.
GRANT USAGE ON DATABASE sales_db TO SHARE sales_s;
GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO SHARE sales_s;
GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO SHARE sales_s;
셰어의 내용을 확인하려면:
SHOW GRANTS TO SHARE sales_s;
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on | privilege | granted_on | name | granted_to | grantee_name | grant_option | granted_by |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE | DATABASE | SALES_DB | SHARE | PRVDR1.SALES_S | false | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE | SCHEMA | SALES_DB.AGGREGATES_EULA | SHARE | PRVDR1.SALES_S | false | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT | TABLE | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE | PRVDR1.SALES_S | false | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
이렇게 하면 다른 계정이 소비할 수 있도록 셰어를 만들기 전에 셰어가 올바르게 구성됐는지 확인할 수 있어요.
3단계: 셰어에 계정 추가하기
주의: Business Critical 계정이고 소비자 계정과 데이터를 공유한다면:
- Snowflake는 비-Business Critical 계정과의 민감한 데이터 공유를 지원하지만(기본적으로 비활성화), 권장하지는 않아요.
- HIPAA와 HITRUST 요건을 준수하기 위해 Snowflake는 HIPAA 계정이 비-HIPAA 계정과 데이터를 공유하는 것을 허용하지 않아요.
- Tri-Secret Secure를 사용한다면 Snowflake는 소비자 계정의 데이터 접근을 자신의 계정 안에서 접근한 것처럼 취급해요.
다음 예시는 sales_s 셰어에 두 계정을 추가해요.
ALTER SHARE sales_s ADD ACCOUNTS = xy12345, yz23456;
이제 계정 xy12345와 yz23456은 셰어를 보고 그 셰어에서 데이터베이스를 만들 수 있어요.
참고: 셰어에 계정을 추가할 때 그 계정이 존재하지 않으면 명령은 성공적으로 완료되지만 셰어에는 아무런 변경이 없어요. 셰어가 제대로 갱신되도록 계정이 존재하고 이름을 올바르게 입력했는지 확인해요.
SHOW SHARES로 셰어를 확인해요. 명령 출력은 sales_s 셰어를 나열해요. kind 컬럼은 이 셰어가 OUTBOUND임을 나타내며, 즉 이 셰어가 다른 Snowflake 계정과 데이터베이스를 공유하고 있다는 뜻이에요. to 컬럼은 셰어가 제공된 모든 계정을 나열해요.
SHOW SHARES;
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| created_on | kind | owner_account | name | database_name | to | owner | comment | listing_global_name |
|-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------|
| 2017-07-09 19:18:09.821 -0700 | INBOUND | SNOW.XY12345 | SALES_S2 | UPDATED_SALES_DB | | | Transformed and updated sales data | |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | |
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
셰어 유지 관리하기
셰어를 관리하려면 셰어에 대한 OWNERSHIP 권한과 CREATE SHARE 전역 권한이 있는 역할을 사용해야 해요.
셰어에 객체 추가하기:
언제든 기존 셰어에 객체를 추가할 수 있어요. 셰어에 추가한 객체는 셰어에서 데이터베이스를 만든 소비자 계정에 즉시 제공돼요. 예를 들어 셰어에 테이블을 추가하면 소비자 계정의 사용자는 테이블이 셰어에 추가되는 즉시 테이블의 데이터를 쿼리할 수 있어요.
중요: 서로 다른 리전이나 클라우드 플랫폼의 데이터 소비자와 데이터를 안전하게 공유하려면, 데이터베이스에 어떤 유형의 객체가 포함되어 있으면 기본 데이터베이스 복제가 차단된다는 점에 유의해요. 새로 고침 연산을 실패하게 하는 객체 전체 목록은 복제의 현재 제한 사항을 참고해요.
Snowsight로 셰어에 객체 추가하기:
Snowsight로 셰어와 연관된 데이터를 수정하려면:
- Snowsight에 로그인해요.
- 탐색 메뉴에서 Data sharing » External sharing을 선택해요.
- Shared by your account 탭을 선택해요.
- 수정할 셰어를 찾아 선택해요.
- Data 섹션에서 Edit를 선택해요.
- 추가하려는 데이터를 선택해요.
- Done을 선택해요.
참고: 웹 인터페이스는 현재 셰어에 외부 테이블, 보안 구체화된 뷰, 보안 UDF를 추가하거나 제거하는 것을 지원하지 않아요. 셰어 안 이 객체들의 모든 관리는 SQL로 수행해야 해요. 또한 다른 데이터베이스의 객체를 참조하는 보안 뷰는 웹 인터페이스로 셰어에 추가할 수 없어요. SQL로 셰어를 만들어야 해요.
SQL로 셰어에 객체 추가하기:
GRANT <privilege> … TO SHARE 명령을 사용해요.
참고:
- 객체의 스키마가 이미 셰어에 있다면 객체만 추가하면 돼요.
- 객체의 스키마가 아직 셰어에 없다면 먼저 스키마를 추가한 뒤 객체를 추가해야 해요.
다음 예시는 aggregates_eula 스키마의 agg_secure라는 보안 뷰를 sales_s 셰어에 추가해요.
SHOW GRANTS TO SHARE sales_s;
-- ... (기존 권한 목록)
GRANT SELECT ON VIEW sales_db.aggregates_eula.agg_secure TO SHARE sales_s;
SHOW GRANTS TO SHARE sales_s;
-- 이제 AGG_SECURE 행이 추가됨
셰어에서 객체 제거하기:
언제든 기존 셰어에서 객체를 제거할 수 있어요. 셰어에서 제거한 객체는 셰어에서 데이터베이스를 만든 소비자 계정에 즉시 사용할 수 없게 돼요. 예를 들어 셰어에서 테이블을 제거하면 테이블이 셰어에서 제거되는 즉시 소비자 계정의 사용자는 테이블의 데이터를 더 이상 쿼리할 수 없어요.
참고: 웹 인터페이스는 현재 셰어에서 외부 테이블, 보안 구체화된 뷰, 보안 UDF를 추가하거나 제거하는 것을 지원하지 않아요.
Snowsight로 셰어에서 객체 제거하기:
- Snowsight에 로그인해요.
- 탐색 메뉴에서 Data sharing » External sharing을 선택해요.
- Shared by your account 탭을 선택해요.
- 수정할 셰어를 찾아 선택해요.
- Data 섹션에서 Edit를 선택해요.
- 셰어에서 제거할 데이터의 체크박스를 선택 해제해요.
- Done을 선택해요.
SQL로 셰어에서 객체 제거하기:
REVOKE <privilege> … FROM SHARE 명령으로 언제든 기존 셰어에서 객체를 제거해요. 다음 예시는 aggregates_eula 스키마의 agg_secure라는 보안 뷰를 sales_s 셰어에서 제거해요.
SHOW GRANTS TO SHARE sales_s;
-- ... (AGG_SECURE 포함 목록)
REVOKE SELECT ON VIEW sales_db.aggregates_eula.agg_secure FROM SHARE sales_s;
SHOW GRANTS TO SHARE sales_s;
-- AGG_SECURE 행이 제거됨
셰어에 계정 추가하기:
언제든 기존 셰어에 계정을 추가할 수 있어요. 계정이 셰어에 추가된 후에는 그 계정에 셰어가 즉시 "보이며", 계정은 셰어에서 데이터베이스를 만들고 데이터베이스의 Snowflake 객체를 쿼리하기 시작할 수 있어요.
Snowsight로 셰어에 계정 추가하기:
- Snowsight에 로그인해요.
- 탐색 메뉴에서 Data sharing » External sharing을 선택해요.
- Shared by your account 탭을 선택해요.
- 수정할 셰어를 찾아요.
- Shared With 섹션에서 Add Consumers를 선택해요.
- Share With Snowflake Accounts에 계정 로케이터를 하나 이상 입력해요. 계정 로케이터의 일부를 입력하면 일치하는 모든 계정이 나열돼요.
- Add를 선택해요.
SQL로 셰어에 계정 추가하기:
SQL로 기존 셰어에 소비자를 추가하려면 ALTER SHARE 명령을 사용해요.
셰어에서 계정 제거하기:
언제든 기존 셰어에서 계정을 제거할 수 있어요. 셰어에서 계정을 제거하면 그 계정이 셰어에서 만든 데이터베이스가 즉시 무효화돼요. 계정의 사용자가 데이터베이스에서 수행하는 모든 쿼리와 다른 연산은 더 이상 작동하지 않아요. 셰어에서 계정을 제거한 뒤 다시 추가할 수는 있지만, 이전에 셰어에서 만든 데이터베이스는 복원되지 않아요. 셰어에서 새 데이터베이스를 다시 만들어야 해요.
참고: 셰어에서 계정을 제거하기 전에 그 계정에 미칠 하류(downstream) 영향을 고려해요. 데이터베이스가 즉시 무효화되므로 계정의 사용자가 데이터베이스에서 수행하는 모든 쿼리와 연산이 중단되고, 이는 계정의 비즈니스 운영에 상당한 영향을 줄 수 있어요.
Snowsight로 셰어에서 계정 제거하기:
- Snowsight에 로그인해요.
- 탐색 메뉴에서 Data sharing » External sharing을 선택해요.
- Shared by your account 탭을 선택해요.
- 수정할 셰어를 찾아 선택해요.
- Shared With 섹션에서 … » Remove를 선택해요.
- 확인 대화상자에서 Remove를 선택해요.
SQL로 셰어에서 계정 제거하기:
ALTER SHARE 명령으로 기존 셰어에서 계정을 제거해요. 셰어에 새 계정 목록을 설정하고 원하는 계정을 목록에서 빼서 계정을 제거해요.
셰어 삭제하기:
언제든 셰어를 삭제(제거)할 수 있어요. 셰어를 삭제하면 소비자 계정이 셰어에서 만든 모든 데이터베이스가 즉시 무효화돼요. 이 데이터베이스에서 수행되는 모든 쿼리와 다른 연산은 더 이상 작동하지 않아요. 셰어를 삭제한 뒤 같은 이름으로 다시 만들 수는 있지만, 소비자 계정이 셰어에서 만든 데이터베이스는 복원되지 않아요. 다시 만든 셰어는 새 셰어로 간주되며 모든 소비자 계정은 새 셰어에서 새 데이터베이스를 만들어야 해요.
참고: 셰어를 삭제하기 전에 셰어를 사용하는 모든 소비자 계정에 미칠 하류 영향을 고려해요. 대신 셰어에서 개별 객체를 제거하는 것을 고려해 볼 수 있어요. 제거된 객체는 소비자 계정의 추가 작업 없이 다시 셰어에 추가할 수 있어요.
Snowsight로 셰어 삭제하기:
- Snowsight에 로그인해요.
- 탐색 메뉴에서 Data sharing » External sharing을 선택해요.
- Shared by your account 탭을 선택해요.
- 삭제할 셰어를 찾아 선택해요.
- … » Drop을 선택해요.
- 확인 대화상자에서 Drop을 선택해요.
SQL로 셰어 삭제하기:
DROP SHARE 명령으로 셰어를 삭제해요.
셰어에서 데이터베이스를 만든 소비자 보기
셰어에서 데이터베이스를 만든 계정을 보려면 SHOW GRANTS OF SHARE 명령을 사용해요. 이 명령의 출력은 SHOW SHARES가 반환하는 계정 목록과 다음 방식으로 달라요.
SHOW SHARES는 계정이 이용할 수 있는 모든 셰어와 각 셰어에 접근할 수 있는 계정을 나열해요.SHOW GRANTS OF SHARE는 셰어에서 데이터베이스를 만든 모든 계정을 나열해요. 셰어에서 데이터베이스를 만든 계정이 없으면 결과는 비어 있어요.
예를 들어 다음은 다음을 보여줘요.
- 소유자 계정
SNOW.PRVDR1이 계정xy12345와yz23456에sales_s와sales_s2두 셰어를 제공했음. - 계정
xy12345가prvdr1.sales_s셰어에서 데이터베이스를 만들었음. sales_s2셰어에서 데이터베이스를 만든 계정은 없음.
SHOW SHARES;
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| created_on | kind | owner_account | name | database_name | to | owner | comment | listing_global_name |
|-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------|
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.PRVDR1 | SALES_S | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.PRVDR1 | SALES_S2 | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | |
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
SHOW GRANTS OF SHARE sales_s;
+-------------------------------+----------------+------------+----------+
| created_on | share | granted_to | account |
|-------------------------------+----------------+------------+----------|
| 2017-06-15 18:00:03.803 -0700 | PRVDR1.SALES_S | ACCOUNT | XY12345 |
+-------------------------------+----------------+------------+----------+
SHOW GRANTS OF SHARE sales_s2;
+------------+-------+------------+---------+
| created_on | share | granted_to | account |
|------------+-------+------------+---------+
+------------+-------+------------+---------+
셰어와 데이터 보기
Snowsight로 당신의 계정이 listing, 직접 셰어, 또는 데이터 익스체인지의 일부로 공유한 데이터를 볼 수 있어요. 계정이 공유한 데이터를 보려면:
- Snowsight에 로그인해요.
- 탐색 메뉴에서 Data sharing » External sharing을 선택해요.
- Shared by your account 탭을 선택해요.
이 페이지에서 다음을 할 수 있어요.
- 만들었거나 접근 권한이 있는 셰어를 봐요. 여기에는 셰어의 데이터베이스, 셰어에 추가된 소비자 계정(있는 경우), 셰어 생성 날짜, 공유된 객체와 같은 정보가 포함돼요.
- 특정 소비자에게만 제공되거나 Snowflake Marketplace에서 모든 소비자가 이용할 수 있는 listing과 연관된 셰어를 탐색해요.
- 프라이빗 데이터 익스체인지 안에서 공유된 셰어에 접근해요.
공유된 데이터를 선택적으로 표시하려면 다음 필터를 사용할 수 있어요.
- All Types 드롭다운으로 유형별로 필터링해요. 보안 셰어 또는 데이터 익스체인지 안에서 공유된 listing만 표시하도록 선택해요. 일부 보안 셰어는 listing과 연관된 셰어예요.
- Shared With 드롭다운으로 소비자 계정이나 데이터 익스체인지별로 필터링해요. 특정 소비자나 데이터 익스체인지를 하나 이상 선택해 선택과 연관된 모든 셰어나 listing을 봐요.
셰어와 데이터 관리하기
셰어를 선택해 셰어를 관리하고, 개별 소비자 계정의 접근을 회수하고, 셰어에 설명을 추가할 수 있어요. listing으로 제공되는 보안 셰어를 관리하거나 Snowflake Marketplace의 listing을 관리하려면 Provider Studio를 사용해요.