공유 관련 작업하기

이 항목에서는 공유 생성 및 구성하기, 기타(즉, 컨슈머) 계정과 공유를 공유하기, 공유의 지속적인 유지 관리 수행과 관련된 데이터 공급자 계정 관련 태스크에 대한 설명을 제공합니다.

임의의 역할을 사용하여 수행할 수 있는 공유할 오브젝트 준비 작업을 제외하고, 이러한 작업을 수행하려면 ACCOUNTADMIN 역할 또는 전역 CREATE SHARE 권한이 부여된 역할을 사용해야 합니다. CREATE SHARE 권한에 대한 자세한 내용은 ACCOUNTADMIN 외 역할을 사용하여 데이터 공유 작업 수행하기 를 참조하십시오.

이 항목의 내용:

데이터 공유 및 Business Critical 계정

Business Critical 계정 사용자의 경우 기타(즉, 컨슈머) 계정과 데이터를 공유하기 위한 다음 조건에 유의하십시오.

공급자

컨슈머

지원됨

활성화됨

참고

Business Critical ( HIPAA 및 HITRUST 포함)

~

Business Critical ( HIPAA 및 HITRUST 포함)

두 HIPAA 계정 모두에는 상호 서명된 BAA가 있어야 합니다.

Business Critical ( HIPAA 및 HITRUST 포함)

~

기타 모든 에디션

자세한 내용은 Business Critical 계정에서 Business Critical 외 계정으로 공유 활성화하기 섹션을 참조하십시오.

Business Critical

~

Business Critical 또는 Business Critical ( HIPAA 및 HITRUST 포함)

Business Critical

~

기타 모든 에디션

자세한 내용은 Business Critical 계정에서 Business Critical 외 계정으로 공유 활성화하기 섹션을 참조하십시오.

기타 모든 Snowflake 에디션의 경우:

주의

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가 사용자의 AWS KMS에 액세스해야 할 수 있습니다.

이는 권장 사항일 뿐이며, Snowflake가 강제로 적용하지 않습니다. 데이터 공유 결정은 항상 데이터 공급자의 판단을 따르며, Snowflake는 부적절하게 공유된 데이터에 대한 어떠한 책임도 지지 않습니다.

일반 데이터 공유 고려 사항 및 사용법

공유를 생성 및 유지 관리하기 위한 주요 세부 사용법은 다음과 같습니다.

  • 리전 및 클라우드 플랫폼 사이에서 데이터를 공유할 수 있습니다. 자세한 내용은 리전 및 클라우드 플랫폼 전체에서 안전하게 데이터 공유하기 섹션을 참조하십시오.

  • 공유에는 여러 데이터베이스로부터의 데이터가 포함될 수 있습니다. 자세한 내용은 여러 데이터베이스에서 데이터 공유하기 섹션을 참조하십시오.

  • 데이터 보안 및 개인 정보 보호 목적으로, 현재 공유에서는 보안 뷰 만 지원됩니다. 표준 뷰가 공유에 추가되면 Snowflake는 오류를 반환합니다.

  • 데이터베이스에 스트림에 대한 보안 뷰를 만든 다음 해당 뷰를 컨슈머와 공유하는 것은 권장하지 않습니다. 이 시나리오에서는 지원되는 작업이 아니므로 안티패턴인 다른 계정의 스트림을 수정하는 기능이 필요합니다. 대신, 컨슈머가 테이블에 자신의 스트림을 만들고 공유하는 뷰를 보호할 수 있도록 허용합니다. 자세한 내용은 이 항목의 공유 오브젝트의 스트림 섹션을 참조하십시오.

  • 공유에 계정을 추가하면 계정에서 공유를 즉시 사용할 수 있습니다.

  • 동일한 컨슈머 계정으로 다른 공유를 통해 동일한 데이터베이스의 테이블을 공유하는 경우 컨슈머가 공유 중 하나에서 데이터베이스를 생성하면 가져온 데이터베이스에서 모든 공유 테이블을 볼 수 있습니다. 이러한 상황이 발생하지 않도록 하려면 공유할 각 테이블에 대한 별도의 스키마를 생성해야 합니다.

  • 공유에서 데이터베이스를 생성한 모든 컨슈머는 공유의 테이블(또는 공유의 뷰에서 참조하는 테이블)의 새 행과 수정된 행을 즉시 사용할 수 있습니다. 이러한 테이블을 업데이트할 때 이 점에 유의해야 합니다.

  • 컨슈머는 공유의 데이터베이스에서 생성된 새 오브젝트를 즉시 사용할 수 있는 것이 아닙니다.

    컨슈머가 오브젝트를 사용할 수 있도록 하려면 GRANT <권한> … TO SHARE 명령을 사용하여 공유에 오브젝트를 명시적으로 추가해야 합니다.

    참고

    이러한 요구 사항은 데이터베이스에서 삭제된 후 데이터베이스에서 동일한 이름으로 다시 생성된 오브젝트에도 적용됩니다. 다시 생성된 오브젝트는 새 오브젝트로 취급되므로 공유를 위해 필요한 권한이 오브젝트에 명시적으로 부여된 이후에 액세스할 수 있습니다.

  • 공유 데이터베이스 역할은 오브젝트에 대한 향후 권한 부여를 지원하지 않습니다. 자세한 내용은 GRANT DATABASE ROLE … TO SHARE 섹션을 참조하십시오.

공유를 위한 DDL

공유의 생성 및 관리를 지원하기 위해 Snowflake가 제공하는 특수 DDL 명령 세트는 다음과 같습니다.

데이터베이스 역할의 생성 및 관리를 지원하기 위해 Snowflake가 제공하는 특수 DDL 명령 세트는 다음과 같습니다.

또한, 공급자는 다음과 같은 표준 액세스 제어 DDL을 사용하여 공유의 데이터베이스 오브젝트에 대한 액세스를 확인, 권한 부여 또는 취소할 수 있습니다.

공유 생성 준비하기

공유를 생성하기 전, Snowflake는 공유할 Snowflake 오브젝트를 식별할 것을 권장합니다.

  • 데이터베이스

  • 테이블

  • 외부 테이블

  • 보안 뷰

  • 보안 구체화된 뷰

  • 보안 UDFs

이를 위해서는 수행해야 할 몇 가지 추가 계획 및 관리 작업이 있으며, 특히 테이블에서 데이터의 하위 세트만 공유하려는 경우 더욱 그러합니다.

데이터베이스 및 테이블

데이터베이스를 공유하기 위해서 수행해야 할 준비 작업은 거의 없거나 없습니다. 유사하게 데이터베이스에서 전체 테이블을 공유하는 경우에도 준비가 필요하지 않습니다.

그러나 특정 조건에 따라 또는 컨슈머 계정별로 테이블(또는 테이블 세트)의 데이터를 필터링하는 경우에는 테이블에 대한 보안 뷰를 1개 이상 생성해야 합니다.

보안 오브젝트(뷰, 구체화된 뷰 및 UDF)

공유 데이터베이스에서 데이터 액세스를 엄격하게 제어하려면 반드시 보안 뷰, 보안 구체화된 뷰 및/또는 보안 UDFs 를 사용해야 합니다. 예를 들어, 날짜 또는 기타 조건을 기준으로 데이터를 필터링하거나 단일 공유를 사용하여 다른 컨슈머 계정에 대한 공유 데이터를 분할할 수 있습니다. 보안 오브젝트를 사용하면 기본 테이블과 비즈니스 논리가 노출되지 않도록 보호하는 동시에 데이터에 적용할 세분성 수준을 지정할 수 있습니다.

보안 오브젝트는 해당 CREATE <오브젝트> 또는 ALTER <오브젝트> 명령을 사용하여 표준 오브젝트와 유사한 방식으로 정의할 수 있습니다. 그러나 사용법과 관련하여 중요한 다음 정보에 유의해야 합니다.

  • 정규화된 이름(즉, <db_이름>.<스키마_이름>.<테이블_이름>)으로 테이블을 참조하는 보안 오브젝트는 공유에 포함될 수 있지만, 참조된 데이터베이스 이름은 공유에서 사용되는 데이터베이스의 이름과 반드시 일치해야 합니다.

  • CURRENT_USER 또는 CURRENT_ROLE 함수를 사용하는 보안 오브젝트를 정의에 포함하지 하지 마십시오. 이러한 함수에서 반환되는 컨텍스트 값은 컨슈머 계정과 관련이 없으며 이로 인해 쿼리/사용 시 오브젝트가 실패하게 됩니다.

  • 컨슈머 계정과 공유할 보안 오브젝트를 정의할 때 수행해야 할 중요한/핵심적인 추가 단계는 오브젝트가 올바르게 구성되었는지 확인하여 표시할 데이터만 표시하도록 하는 것입니다. 이러한 단계는 데이터가 공유되는 계정에 따라 데이터 액세스를 제한할 때 특히 중요합니다.

    Snowflake는 이러한 유효성 검사를 편리하게 수행할 수 있도록 SIMULATED_DATA_SHARING_CONSUMER 세션 매개 변수를 제공합니다.

    현재 SIMULATED_DATA_SHARING_CONSUMER 세션 매개 변수는 보안 뷰 및 보안 구체화 뷰만 지원하며 보안 UDFs는 지원하지 않습니다. 세션에서 이 매개 변수를 설정하면 뷰를 공유할 컨슈머 계정의 사용자로 보안 뷰를 쿼리하는 작업을 시뮬레이션할 수 있습니다.

    예를 들어, 이름이 xy12345 인 컨슈머 계정의 경우:

    ALTER SESSION SET SIMULATED_DATA_SHARING_CONSUMER = xy12345;
    
    Copy

자세한 예시는 보안 오브젝트를 사용하여 데이터 액세스 제어하기 를 참조하십시오.

공유 오브젝트의 스트림

데이터 컨슈머는 원본 테이블 또는 뷰에 대한 DML(데이터 조작 언어) 변경 사항을 기록하는 자체 데이터베이스에 스트림을 만들 수 있습니다.

참고

보조 원본 오브젝트의 공유에 Append-only 스트림 생성은 지원되지 않습니다.

데이터 컨슈머가 공유 테이블에서 테이블 스트림을 생성할 수 있도록 설정하기

데이터 컨슈머가 공유 테이블 또는 보안 뷰에서 스트림을 생성하려면 공유 테이블이나 공유 뷰의 기본 테이블에서 변경 내용 추적을 활성화해야 합니다.

또한, 테이블의 데이터 보존 기간도 연장해야 합니다.

변경 내용 추적 활성화

현재 로컬 테이블에 대한 첫 번째 스트림이 생성되면 테이블에 한 쌍의 숨겨진 열이 자동으로 추가되고 변경 내용 추적 메타데이터가 저장되기 시작합니다. 공유 컨슈머는 소스 데이터베이스를 수정할 수 없으므로 공유 테이블에서는 이러한 변경을 수행할 수 없습니다. 대신, 공유할 테이블에 대한 변경 내용 추적을 활성화하려면 각 테이블에서 ALTER TABLE … CHANGE_TRACKING = TRUE를 실행해야 합니다.

테이블의 데이터 보존 기간 연장

로컬 테이블의 스트림이 정기적으로 사용되지 않는 경우 Snowflake는 일시적으로 소스 테이블의 데이터 보존 기간을 연장하여 부실해지는 것을 방지합니다.

공유 테이블의 스트림은 테이블의 데이터 보존 기간을 연장하지 않습니다. 마찬가지로, 공유 뷰의 스트림은 기본 테이블의 데이터 보존 기간을 연장하지 않습니다. 공유 테이블이나 공유 뷰의 기본 테이블에 더 긴 데이터 보존 기간을 수동으로 지정하려면 테이블에 대해 DATA_RETENTION_TIME_IN_DAYS 매개 변수를 설정합니다.

CHANGE_TRACKING 및 DATA_RETENTION_TIME_IN_DAYS 매개 변수는 테이블을 생성(CREATE TABLE 사용)할 때 또는 나중에(ALTER TABLE 사용) 설정할 수 있습니다.

공유 태그 참조

데이터 공유 공급자는 오브젝트에 태그를 설정하고 태그와 태그 지정된 오브젝트를 모두 데이터 공유 컨슈머와 공유할 수 있습니다. 또한 컨슈머는 공유 오브젝트의 태그 참조를 사용할 수 있습니다. 공급자는 태그 참조를 공유하여 태그 문자열 값을 기반으로 하는 테이블 또는 열의 데이터 민감도와 같이, 공유 오브젝트에 관한 추가 컨텍스트를 공유할 수 있습니다.

컨슈머는 SQL을 사용하여 공유 오브젝트에 대한 태그 할당을 확인하고 공유 오브젝트의 태그 참조를 결정할 수 있습니다. 공유 오브젝트의 태그 할당과 참조를 확인함으로써 컨슈머 계정의 데이터 관리자는 데이터의 출처와 데이터 사용 방법에 대해 보다 종합적으로 평가할 수 있습니다. 이러한 새로운 인사이트로 규정 준수 요구 사항을 손쉽게 충족시킬 수 있습니다.

공급자는 태그가 지정된 오브젝트와 동일한 데이터베이스에 태그를 생성하고 이 데이터베이스를 공유해야 합니다. 데이터베이스를 공유한 후 공급자가 공유 오브젝트에서 태그를 설정 해제하면 컨슈머 계정에서도 태그 할당이 변경됩니다. 태그가 설정 해제되면 컨슈머가 태그를 사용하여 공유 오브젝트를 추적할 수 없습니다. 태그 설정을 해제하면 오브젝트에 실수로 태그가 지정되더라도 공급자가 데이터 재량권을 유지할 수 있습니다.

태그 계보 는 공유 데이터베이스의 태그가 지정된 오브젝트에 적용됩니다. 예를 들어 공급자가 공유 데이터베이스의 스키마에 태그를 설정하면 해당 스키마의 오브젝트와 열에도 태그가 지정됩니다. 하지만 컨슈머는 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;
    
    Copy
  • 데이터베이스 역할을 생성하고, 태그에 대한 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;
    
    Copy
컨슈머 옵션

컨슈머는 다음 옵션을 사용하여 컨슈머 계정에서 공유 태그를 볼 수 있습니다.

  • ACCOUNTADMIN 역할을 사용합니다. 컨슈머 계정 관리자는 공급자가 제공하는 공유 태그를 볼 수 있습니다.

  • IMPORTED PRIVILEGES를 가진 역할을 사용합니다. 공유에서 생성된 데이터베이스에 대해 IMPORTED PRIVILEGES를 가진 역할을 부여받거나 상속한 계정 역할은 공급자가 제공하는 공유 태그를 볼 수 있습니다.

    GRANT IMPORTED PRIVILEGES ON DATABASE db_share TO ROLE db_share_role;
    
    Copy
  • 공유 데이터베이스 역할을 사용합니다. 공급자가 태그에 대한 READ 권한을 데이터베이스 역할에 부여하고 데이터베이스 역할을 공유하는 경우 컨슈머는 자신의 계정에 있는 계정 역할에 공유 데이터베이스 역할을 부여할 수 있습니다.

    GRANT DATABASE ROLE my_db_role TO ROLE consumer_analyst_role;
    
    Copy

컨슈머 계정에서는 SQL을 사용하여 공급자가 공유하는 태그, 태그 참조, 태그가 지정된 오브젝트를 볼 수 있습니다.

현재, 컨슈머 계정에서 다음 옵션을 사용하여 공급자가 공유하는 태그, 태그 참조, 태그가 지정된 오브젝트를 볼 수 없습니다.

공유 만들기

공유를 생성하려면 ACCOUNTADMIN 역할 또는 CREATE SHARE 전역 권한이 부여된 역할을 사용해야 합니다.

Snowsight 사용하기

Snowsight 에서 데이터를 공유하는 방법은 여러 가지가 있습니다.

  • 특정 컨슈머에게 또는 Provider Studio 를 사용하여 Snowflake Marketplace 에서 공개적으로 목록을 제공합니다. 목록 만들기 및 게시하기 를 참조하십시오.

  • 데이터 교환 에서 목록을 게시합니다.

  • 해당 리전의 컨슈머 계정과 데이터를 공유하려면 직접 공유를 생성하십시오.

다른 계정과 데이터를 공유하려고 직접 공유를 생성하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Data » Private Sharing 를 선택합니다.

  3. Share » Create a Direct Share 를 선택합니다. Share Data 대화 상자가 열립니다.

  4. 데이터 공유 대화 상자에서 + Select Data 를 선택한 후 다음을 수행합니다.

    1. 원본 데이터베이스를 선택합니다.

    2. 원본 데이터베이스에서 대상 오브젝트를 선택합니다.

    3. 선택적으로, 공유용으로 생성된 Secure Share Identifier 를 업데이트합니다.

    4. 선택적으로, Description 을 입력합니다.

    5. 나머지 텍스트 상자에 계정 이름을 입력합니다. 일부 계정 이름을 입력하면 입력한 텍스트와 일치하는 모든 계정이 나열됩니다. 계정을 더 추가하려면 필요에 따라 반복하십시오. 동일한 리전 내의 계정만 공유에 추가할 수 있습니다.

    6. Create Share 를 선택합니다.

Classic Console 사용하기

Classic Console 의 Shares Shares tab 페이지에서 Outbound 탭을 선택합니다.

SQL 사용하기

SQL을 사용하여 공유를 생성하려면:

  1. CREATE SHARE 명령을 사용하여 빈 공유를 생성합니다.

  2. GRANT <권한> … TO SHARE 명령을 사용하여 공유에 데이터베이스를 추가한 후 공유에 대한 특정 데이터베이스 오브젝트(스키마, 테이블 및 보안 뷰)의 액세스 권한을 선택적으로 부여합니다.

  3. ALTER SHARE 명령을 사용하여 공유에 대한 계정 액세스를 1개 이상 추가합니다.

참고

다음 단계에서는 이름이 prvdr1 인 공급자 계정이 xy12345yz23456 컨슈머 계정과 데이터를 공유하고 있는 것으로 가정합니다.

1단계: 빈 공유 만들기

다음 예에서는 이름이 sales_s 인 빈 공유를 생성합니다.

CREATE SHARE sales_s;
Copy

2단계: 공유에 데이터베이스 및 오브젝트 관련 권한 부여

오브젝트(데이터베이스, 스키마, 테이블, 보안 뷰 등)를 공유에 추가합니다. 데이터베이스 역할을 통해 이러한 오브젝트에 대한 권한을 공유에 추가하거나, 또는 오브젝트에 대한 권한을 공유에 직접 부여하는 옵션 중에서 선택할 수 있습니다. 이러한 옵션에 대한 자세한 내용은 데이터베이스 오브젝트 공유 방법 선택하기 섹션을 참조하십시오.

옵션 1

다음 예에서는 데이터베이스 역할을 만들고, 다음 오브젝트에 대한 권한을 데이터베이스 역할에 부여한 다음, 이전 단계에서 만든 sales_s 공유에 데이터베이스 역할을 부여하는 방법을 보여줍니다.

  • sales_db (데이터베이스)

  • aggregates_eula (스키마)

  • aggregate_1 (테이블)

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;
Copy
옵션 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;
Copy

공유의 내용을 확인하려면:

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 |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

이 작업을 수행하면 공유를 올바르게 구성한 후 다른 계정에서 사용할 수 있도록 설정할 수 있습니다.

3단계: 공유에 계정 추가

주의

Business Critical 계정이 있고 컨슈머 계정과 데이터를 공유하려면:

  • Snowflake는 Business Critical 외 계정과의 민감한 데이터 공유를 지원(기본적으로 비활성화됨)하지만, 이는 권장되지 않습니다.

  • HIPAA 및 HITRUST 요구 사항을 준수할 수 있도록 Snowflake는 HIPAA 계정이 HIPAA 외 계정과 데이터를 공유하는 것을 허용하지 하지 않습니다.

  • Tri-Secret Secure 데이터 보호를 사용하는 경우 Snowflake는 사용자 계정에서 액세스하는 것과 동일한 방식으로 컨슈머 계정의 데이터 액세스를 처리합니다.

이러한 권장 및 제한 사항에 대한 자세한 내용은 데이터 공유 및 Business Critical 계정 을 참조하십시오.

다음 예시에서는 sales_s 공유에 계정을 2개 추가합니다.

ALTER SHARE sales_s ADD ACCOUNTS=xy12345, yz23456;
Copy

이제 xy12345yz23456 계정에서 공유를 확인하고 공유로부터 데이터베이스를 생성할 수 있습니다.

참고

공유에 계정을 추가할 때 계정이 없으면 명령이 완료되지만 공유가 업데이트되지 않습니다. 공유가 올바르게 업데이트되었는지 확인하려면 계정이 있고 이름을 올바르게 입력했는지 확인하십시오.

공유를 확인하려면 SHOW SHARES 를 사용합니다. 이 명령의 출력에서는 sales_s 공유가 나열됩니다. kind 열은 공유가 OUTBOUND임을 나타내며, 즉 이 공유가 다른 Snowflake 계정과 데이터베이스를 공유하고 있음을 의미합니다. to 열에는 공유를 사용할 수 있는 모든 계정이 나열됩니다.

SHOW SHARES;
Copy
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| 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 전역 권한이 있는 역할을 사용해야 합니다.

공유에 오브젝트 추가하기

언제든지 기존 공유에 오브젝트를 추가할 수 있습니다. 공유에 추가된 오브젝트는 공유에서 데이터베이스를 생성한 컨슈머 계정에서 즉시 사용할 수 있습니다. 예를 들어, 공유에 테이블을 추가하면 컨슈머 계정의 사용자는 테이블이 공유에 추가되는 즉시 테이블의 데이터를 쿼리할 수 있습니다.

참고

웹 인터페이스에서는 공유에서 외부 테이블, 안전한 구체화된 뷰 또는 보안 UDFs의 추가 또는 제거를 지원하지 않습니다. 공유에서 이러한 오브젝트의 모든 관리는 반드시 SQL을 사용하여 수행해야 합니다.

중요

다른 리전 또는 클라우드 플랫폼 에서 데이터 컨슈머와 데이터를 안전하게 공유하려는 경우, 데이터베이스에 외부 테이블이 하나 이상 있으면 기본 데이터베이스를 복제할 수 없음에 유의해야 합니다.

Snowsight 사용하기

Snowsight 를 사용하여 공유와 연결된 데이터를 수정하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Data » Private Sharing 를 선택합니다.

  3. Shared by Your Account 탭을 선택합니다.

  4. 수정하려는 공유를 찾아 선택합니다.

  5. Data 섹션에서 Edit 을 선택합니다.

  6. 추가하려는 데이터를 선택합니다.

  7. Done 을 선택합니다.

Classic Console 사용하기

Classic Console 의 Shares Shares tab 페이지에서 Outbound 탭을 선택합니다.

SQL 사용하기

GRANT <권한> … TO SHARE 명령을 사용합니다.

참고

  • 오브젝트에 대한 스키마가 이미 공유에 있는 경우에는 오브젝트를 추가하기만 하면 됩니다.

  • 오브젝트에 대한 스키마가 아직 공유에 없는 경우에는 우선 스키마를 추가한 후 오브젝트를 추가해야 합니다.

다음 예에서는 agg_secure 스키마에서 이름이 aggregates_eula 인 보안 뷰를 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 |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+

GRANT SELECT ON VIEW sales_db.aggregates_eula.agg_secure 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 |
| 2017-06-17 12:33:15.310 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGG_SECURE  | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

공유에서 오브젝트 제거하기

언제든지 기존 공유에서 오브젝트를 제거할 수 있습니다. 공유에서 제거된 모든 오브젝트는 공유에서 데이터베이스를 생성한 컨슈머 계정에서 즉시 사용할 수 없습니다.

예를 들어, 공유에서 테이블을 제거하는 경우 컨슈머 계정의 사용자는 테이블이 공유에서 제거되는 즉시 테이블의 데이터를 더 이상 쿼리할 수 없습니다.

참고

웹 인터페이스에서는 공유에서 외부 테이블, 안전한 구체화된 뷰 또는 보안 UDFs의 추가 또는 제거를 지원하지 않습니다. 공유에서 이러한 오브젝트의 모든 관리는 반드시 SQL을 사용하여 수행해야 합니다.

Snowsight 사용하기

Snowsight 를 사용하여 공유와 연결된 데이터를 제거하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Data » Private Sharing 를 선택합니다.

  3. Shared by Your Account 탭을 선택합니다.

  4. 수정하려는 공유를 찾아 선택합니다.

  5. Data 섹션에서 Edit 을 선택합니다.

  6. 공유에서 데이터를 선택하고 공유에서 제거하려는 데이터에 대한 확인란을 선택 취소합니다.

  7. Done 을 선택합니다.

Classic Console 사용하기

Classic Console 의 Shares Shares tab 페이지에서 Outbound 탭을 선택합니다.

SQL 사용하기

REVOKE <권한> … FROM SHARE 명령을 사용하면 언제든지 기존 공유에서 오브젝트를 제거합니다.

다음 예에서는 sales_s 공유의 aggregates_eula 스키마에서 agg_secure 보안 뷰를 제거합니다.

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 |
| 2017-06-17 12:33:15.310 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGG_SECURE  | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+

REVOKE SELECT ON VIEW sales_db.aggregates_eula.agg_secure FROM 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 |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

공유에 계정 추가하기

언제든지 기존 공유에 계정을 추가할 수 있습니다. 계정이 공유에 추가되면, 계정에 공유가 즉시 《표시》되며 계정에서 공유에서 데이터베이스를 생성하고 데이터베이스의 Snowflake 오브젝트를 쿼리할 수 있습니다.

Snowsight 사용하기

Snowsight 를 사용하여 기존 공유에 컨슈머를 추가하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Data » Private Sharing 를 선택합니다.

  3. Shared by Your Account 탭을 선택합니다.

  4. 수정하려는 공유를 찾습니다.

  5. Shared With 섹션에서 Add Consumers 을 선택합니다.

  6. Share With Snowflake Accounts 에 하나 이상의 계정 이름을 입력합니다. 계정 이름의 일부를 입력하면 그와 일치하는 모든 계정이 나열됩니다.

  7. Add 를 선택합니다.

Classic Console 사용하기

Classic Console 의 Shares Shares tab 페이지에서 Outbound 탭을 선택합니다.

계정을 추가할 때 사용자는 전체 또는 독자 계정을 추가할지를 선택할 수 있습니다. 또한, 사용자는 즉시 독자 계정을 생성한 후 공유에 추가할 수도 있습니다.

SQL 사용하기

SQL을 사용하여 기존 공유에 컨슈머를 추가하려면 ALTER SHARE 명령을 사용하십시오.

공유에서 계정 제거하기

언제든지 기존 공유에서 계정을 제거할 수 있습니다. 공유에서 계정을 제거하면 공유에서 생성한 데이터베이스가 즉시 무효화됩니다. 계정의 사용자가 데이터베이스에서 수행하는 모든 쿼리 및 기타 작업이 더 이상 동작하지 않습니다.

공유에서 계정을 제거한 후 공유에 다시 추가할 수 있지만, 공유에서 이전에 생성된 데이터베이스는 복구되지 않습니다. 사용자는 공유에서 새 데이터베이스를 만들어야 합니다.

참고

공유에서 계정을 제거하기 전, 계정에 대한 다운스트림 영향을 고려하십시오. 데이터베이스가 즉시 무효화되므로, 계정의 사용자가 데이터베이스에 대해 수행하는 모든 쿼리 및 기타 작업의 작동이 중지되고 계정의 비즈니스 운영에 상당한 영향을 미칠 수 있습니다.

Snowsight 사용하기

Snowsight 를 사용하여 기존 공유에서 컨슈머를 제거하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Data » Private Sharing 를 선택합니다.

  3. Shared by Your Account 탭을 선택합니다.

  4. 수정하려는 공유를 찾아 선택합니다.

  5. Shared With 섹션에서 » Remove 를 선택합니다.

  6. 확인 대화 상자에서 Remove 를 선택합니다.

Classic Console 사용하기

Classic Console 의 Shares Shares tab 페이지에서 Outbound 탭을 선택합니다.

SQL 사용하기

ALTER SHARE 명령을 사용하여 기존 공유에서 계정을 제거합니다.

공유에 대한 새 계정 목록을 설정하고 원하는 계정을 목록에서 제외하여 공유에서 계정을 제거합니다.

SQL을 사용하여 공유 삭제하기

언제든지 공유를 삭제할 수 있습니다. 공유를 삭제하면 컨슈머 계정이 공유에서 생성한 모든 데이터베이스가 즉시 무효화됩니다. 이러한 데이터베이스에서 수행된 모든 쿼리 및 기타 작업은 더 이상 작동하지 않습니다.

공유를 삭제한 후 동일한 이름으로 다시 생성할 수 있지만, 컨슈머 계정이 공유에서 생성한 데이터베이스는 복구되지 않습니다. 다시 생성된 공유는 새 공유로 취급되며, 모든 컨슈머 계정은 새 공유에서 새 데이터베이스를 생성해야 합니다.

참고

공유를 삭제하기 전, 공유를 사용하는 모든 컨슈머 계정에 대한 다운스트림 영향을 고려하십시오.

대신, 공유에서 개별 오브젝트를 제거할 수도 있습니다. 제거된 오브젝트는 컨슈머 계정에서 추가 작업을 수행할 필요 없이 공유에 다시 추가할 수 있습니다.

Snowsight 사용하기

Snowsight 를 사용하여 공유를 삭제하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Data » Private Sharing 를 선택합니다.

  3. Shared by Your Account 탭을 선택합니다.

  4. 삭제하려는 공유를 찾아 선택합니다.

  5. » Drop 를 선택합니다.

  6. 확인 대화 상자에서 Drop 를 선택합니다.

Classic Console 사용하기

Classic Console 의 Shares Shares tab 페이지에서 Outbound 탭을 선택합니다.

SQL 사용하기

DROP SHARE 명령을 사용하여 공유를 삭제합니다.

SQL을 사용하여 공유에서 데이터베이스를 생성한 컨슈머 보기

공유에서 데이터베이스를 생성한 계정을 확인하려면 SHOW GRANTS OF SHARE 명령을 사용합니다. 이 명령의 출력은 다음과 같은 점에서 SHOW SHARES에서 반환된 계정 목록과 다릅니다.

  • SHOW SHARES에는 계정에서 사용할 수 있는 모든 공유 및 각 공유에 액세스할 수 있는 계정이 나열됩니다.

  • SHOW GRANTS OF SHARE에는 공유에서 데이터베이스를 생성한 모든 계정이 나열됩니다. 공유에서 데이터베이스를 생성한 계정이 없으면 빈 결과가 제공됩니다.

예를 들어, 다음 예의 결과는 다음과 같습니다.

  • 소유자 계정 SNOW.PRVDR1 에서 2개의 공유 sales_ssales_s2xy12345yz23456 계정에서 사용할 수 있도록 했습니다.

  • xy12345 계정이 prvdr1.sales_s 공유에서 데이터베이스를 생성했습니다.

  • sales_s2 공유에서 데이터베이스를 생성한 계정이 없습니다.

SHOW SHARES;
Copy
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| 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;
Copy
+-------------------------------+----------------+------------+----------+
| 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;
Copy
+------------+-------+------------+---------+
| created_on | share | granted_to | account |
|------------+-------+------------+---------|
+------------+-------+------------+---------+

자신이 공유한 데이터 보기 및 관리하기

Snowsight 를 사용하면 목록, 직접 공유를 사용하거나 데이터 교환의 일부로 자신의 계정에서 공유한 데이터를 확인할 수 있습니다.

자신의 계정에서 공유한 데이터를 보려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. Data » Private Sharing 를 선택합니다.

  3. Shared by Your Account 탭을 선택합니다.

이 페이지에서 다음을 수행할 수 있습니다.

  • 사용자가 생성했거나 액세스 권한이 있는 공유를 살펴봅니다. 여기에는 공유에 대한 데이터베이스, 공유에 추가된 컨슈머 계정(있는 경우), 공유 생성 날짜, 공유 오브젝트와 같은 정보가 포함됩니다.

  • Snowflake Marketplace 에서 특정 컨슈머에게만 제공되거나 모든 컨슈머가 사용할 수 있는 목록과 연결된 공유를 탐색합니다.

  • 비공개 데이터 교환 내에서 공유되는 공유에 액세스합니다.

다음 필터를 사용해 공유 데이터를 선택적으로 표시할 수 있습니다.

  • All Types 드롭다운 목록을 사용하여 유형별로 필터링합니다. 보안 공유 또는 데이터 교환 내에서 공유된 목록만 표시하도록 선택합니다. 일부 보안 공유는 목록과 관련된 공유입니다.

  • Shared With 드롭다운 목록을 사용하여 컨슈머 계정 또는 데이터 교환을 기준으로 필터링합니다. 하나 이상의 특정 컨슈머 또는 데이터 교환을 선택하여 선택 항목과 관련된 모든 공유 또는 목록을 봅니다.

공유를 관리하고 개별 컨슈머 계정의 액세스를 취소하거나 공유에 설명을 추가하려면 공유를 선택하십시오. 목록으로 제공되는 보안 공유를 관리하거나 Snowflake Marketplace 에서 목록을 관리하려면 Provider Studio 를 사용하십시오. 자세한 내용은 공급자로서 목록 관리하기 를 참조하십시오.