공유 관련 작업하기

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

이러한 태스크를 수행하려면 ACCOUNTADMIN 역할(또는 CREATE SHARES 전역 권한이 부여된 역할)을 사용해야 합니다. CREATE SHARES 권한에 대한 자세한 내용은 ACCOUNTADMIN 외 역할이 데이터 공유 작업을 수행할 수 있도록 설정 를 참조하십시오.

이 규칙에서 한 가지 예외는 공유할 오브젝트(데이터베이스, 테이블 등)를 준비하는 것이며, 이 작업은 모든 역할을 사용하여 수행할 수 있습니다.

이 항목의 내용:

Data Sharing 및 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 에디션의 경우:

  • VPS(Virtual Private Snowflake)에서는 리전 사이에서의 데이터 공유에 대한 현재 제한 사항으로 인해 Secure Data Sharing을 지원하지 않습니다.

  • Standard 및 Enterprise Edition은 Secure Data Sharing을 지원하지만 일반적인 유의 사항이 적용됩니다.

자세한 내용은 이 항목의 일반 데이터 공유 고려 사항 및 사용법 섹션을 참조하십시오.

주의

Snowflake는 데이터 공유에 참여하는 HIPAA(및 HITRUST) 계정이 서로 BAA에 서명했는지를 확인할 책임이 없으며, 이는 데이터를 공유하는 계정의 판단을 따릅니다. BAA에 서명하지 않으면 두 계정, 특히 공급자 계정이 HIPAA(및 HITRUST) 규정을 준수하는 것에 영향을 줄 수 있습니다.

또한, Business Critical 계정 사용자의 경우 Business Critical에서 제공하는 예상 데이터 보호 수준을 유지하려면, Business Critical 계정이 아닌 계정과 Secure Data Sharing을 활성화하도록 Snowflake에 요청하기 전 다음을 고려하는 것이 적극 권장됩니다.

  • Business Critical 외 계정과 민감한 데이터를 공유하지 마십시오.

  • 민감도 수준이 떨어지는 데이터를 저장하고 이러한 데이터를 Business Critical 외 계정과 공유하는 Business Critical이 아닌 보조 계정을 만드는 것이 좋습니다.

  • Business Critical 계정으로 Tri-Secret Secure를 사용하고 다른 계정과 데이터를 공유하는 경우 Snowflake는 이러한 계정으로부터의 데이터 액세스가 사용자 계정 내에서 발생한 것으로 취급합니다. 특히, 컨슈머 계정에 대한 액세스 권한을 부여하려면 Snowflake가 사용자의 AWS KMS에 액세스해야 할 수 있습니다.

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

공유를 위한 웹 인터페이스

ACCOUNTADMIN 역할이 있는 경우(또는 CREATE SHARES 권한이 부여된 역할이 있는 경우), Snowflake 웹 인터페이스의 Shares Shares tab 페이지를 통해 공유를 생성하고 관리하기 위한 대부분의 작업을 수행할 수 있습니다.

Shares page in the Classic Console

수행할 수 있는 작업은 공유가 Outbound 또는 Inbound 인지에 따라 다릅니다.

아웃바운드 공유(공급자)

아웃바운드 공유는 컨슈머 계정과 데이터를 공유하기 위해 사용자의 계정에서 생성됩니다. 웹 인터페이스에서 아웃바운드 공유와 관련하여 수행할 수 있는 작업은 다음과 같습니다.

  • 사용자가 생성했거나 액세스 권한이 있는 공유를 살펴봅니다. 제공되는 정보로는 공유를 위한 데이터베이스와 공유에 추가된 컨슈머 계정(있는 경우) 등이 있습니다.

  • 공유를 생성합니다.

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

  • 다음을 포함하여 공유를 편집합니다.

    • 공유에 있는 오브젝트를 살펴봅니다.

    • 공유에서 테이블 또는 보안 뷰를 추가하거나 제거합니다.

      참고

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

      중요

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

    • 개별 컨슈머 계정에 대한 공유 액세스를 취소합니다.

  • 공유를 삭제합니다. 그러면 컨슈머가 공유를 위해 생성한 모든 데이터베이스가 즉시 무효화됩니다.

인바운드 공유(컨슈머)

인바운드 공유는 공급자 계정에 의해 사용자 계정과 공유됩니다. 웹 인터페이스에서 인바운드 공유와 관련하여 수행할 수 있는 작업은 다음과 같습니다.

  • 공급자의 모든 공유 보기(공유를 제공한 사용자 및 계정에서 데이터베이스가 생성되었는지 여부 포함).

  • 공유에서 데이터베이스를 생성합니다.

공유를 위한 데이터베이스가 생성된 이후 데이터베이스에서 수행되는 다른 모든 작업(예: 데이터베이스 삭제)은 Databases Databases tab 페이지에서 수행됩니다.

공유를 위한 DDL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    참고

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

공유 생성 준비하기

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

  • 데이터베이스

  • 테이블

  • 외부 테이블

  • 보안 뷰

  • 보안 구체화된 뷰

  • 보안 UDFs

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

데이터베이스 및 테이블

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

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

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

공유 데이터베이스에서 데이터 액세스를 엄격하게 제어하려면 반드시 보안 뷰, 보안 구체화된 뷰 및/또는 보안 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(데이터 조작 언어) 변경 사항을 기록하는 자체 데이터베이스에 스트림을 만들 수 있습니다.

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

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

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

변경 내용 추적 활성화

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

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

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

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

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

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는 사용자 계정에서 액세스하는 것과 동일한 방식으로 컨슈머 계정의 데이터 액세스를 처리합니다.

이러한 권장 및 제한 사항에 대한 자세한 내용은 Data Sharing 및 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;

+-------------------------------+----------+-------------------------+-----------------------+------------------+--------------+----------------------------------------+
| created_on                    | kind     | name                    | database_name         | to               | owner        | comment                                |
|-------------------------------+----------+-------------------------+-----------------------+------------------+--------------+----------------------------------------|
| 2016-07-09 19:18:09.821 -0700 | INBOUND  | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA |                  |              | Sample data sets provided by Snowflake |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | PRVDR1.SALES_S          | SALES_DB              | XY12345, YZ23456 | ACCOUNTADMIN |                                        |
+-------------------------------+----------+-------------------------+-----------------------+------------------+--------------+----------------------------------------+
Copy

SQL을 사용하여 공유 유지 관리하기

공유에서 데이터베이스를 생성한 컨슈머 보기

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

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

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

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

  • 2개의 공유 prvdr1.sales_sprvdr1.sales_s2xy12345yz23456 에서 사용할 수 있습니다.

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

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

SHOW SHARES;

+-------------------------------+----------+-------------------------+-----------------------+------------------+--------------+----------------------------------------+
| created_on                    | kind     | name                    | database_name         | to               | owner        | comment                                |
|-------------------------------+----------+-------------------------+-----------------------+------------------+--------------+----------------------------------------|
| 2016-07-09 19:18:09.821 -0700 | INBOUND  | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA |                  |              | Sample data sets provided by Snowflake |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | PRVDR1.SALES_S          | SALES_DB              | XY12345, YZ23456 | ACCOUNTADMIN |                                        |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | 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 |
|------------+-------+------------+---------|
+------------+-------+------------+---------+
Copy

공유에 오브젝트 추가하기

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

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

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

공유에 계정 추가하기

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

공유에서 계정 제거하기

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

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

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

참고

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

공유 삭제하기

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

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

참고

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

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