여러 데이터베이스에서 데이터 공유하기

Snowflake 데이터 공급자는 보안 뷰를 사용하여 여러 데이터베이스의 데이터를 공유할 수 있습니다. 보안 뷰는 1개 이상의 데이터베이스에 포함된 스키마, 테이블 및 기타 뷰 등의 오브젝트를 참조할 수 있지만, 해당 데이터베이스가 동일한 계정에 속해야 합니다.

여러 데이터베이스의 오브젝트를 참조하는 보안 뷰를 공유하는 것은 단일 데이터베이스에 포함된 데이터를 공유하는 것과는 다릅니다.

데이터를 공유하기 위한 모든 표준 단계 를 수행해야 할 뿐만 아니라, 공유할 보안 뷰에서 참조하는 각 데이터베이스에 REFERENCE_USAGE 권한도 반드시 부여해야 합니다. 그러나 보안 뷰가 포함된 데이터베이스의 경우에는 REFERENCE_USAGE 권한을 부여할 필요가 없습니다.

참고

데이터베이스 역할을 사용하여 여러 데이터베이스의 데이터를 공유할 수 없습니다. 데이터베이스 역할 에 REFERENCE_USAGE 권한을 부여할 수 없으며 데이터베이스 역할을 사용하여 여러 데이터베이스의 오브젝트를 참조하는 보안 뷰를 공유에 부여할 수 없습니다.

공유에 보안 뷰를 부여하기 전에 보안 뷰에서 참조되는 각 데이터베이스에 대해 별도로 REFERENCE_USAGE 권한을 부여해야 합니다.

여러 데이터베이스의 오브젝트를 참조하는 보안 뷰를 공유하려면:

  1. ACCOUNTADMIN 역할 또는 CREATE SHARE 전역 권한이 부여된 역할이 있는 사용자로 Snowflake 계정에 연결합니다. CREATE SHARE 권한에 대한 자세한 내용은 ACCOUNTADMIN 외 역할을 사용하여 데이터 공유 작업 수행하기 를 참조하십시오.

  2. CREATE SHARE 를 사용하여 공유 만들기

  3. GRANT <권한> … TO SHARE 를 사용하여 공유할 데이터베이스에 USAGE 권한을 부여합니다.

    참고

    여러 데이터베이스에 포함된 오브젝트를 참조하는 보안 뷰를 공유하는 경우에는 보안 뷰가 생성된 데이터베이스에만 USAGE 권한을 부여해야 합니다. 공유당 1개의 데이터베이스에만 USAGE 권한을 부여할 수 있습니다.

    데이터베이스에 USAGE 권한을 부여하면 공유가 데이터베이스와 연결되는데, 이는 공유에 다른 권한을 부여하는 데 필수적입니다.

  4. GRANT <권한> … TO SHARE 를 사용하여 공유할 데이터베이스의 각 스키마에 USAGE 권한을 부여합니다.

  5. GRANT <권한> … TO SHARE 를 사용하여 공유할 뷰에서 참조하는 오브젝트 등 각 추가 데이터베이스에 REFERENCE_USAGE 권한을 부여합니다.

  6. GRANT <권한> … TO SHARE 를 사용하여 뷰에 대한 SELECT 권한을 부여하여 공유에 뷰를 추가합니다.

  7. ALTER SHARE 를 사용하여 공유에 1개 이상의 컨슈머 계정을 추가합니다.

이제 지정된 계정에서 공유를 사용할 수 있습니다.

참고

다른 데이터베이스의 UDF를 참조하는 보안 뷰를 공유하려면 UDF를 보안 상태로 만들어야 합니다. 보안 UDF 생성에 대한 자세한 내용은 보안 UDF 또는 저장 프로시저 만들기 섹션을 참조하십시오.

예

보안 뷰를 생성하는 다음 예를 참조하십시오.

예 1: 기존 데이터베이스에서 보안 뷰 생성 및 공유

데이터의 특성과 비즈니스 요구 사항에 따라 데이터를 다른 데이터베이스로 구성하는 공급자가 해당 데이터베이스의 데이터와 다른 데이터베이스의 오브젝트(예: 스키마, 테이블, 뷰)를 조인하는 데이터베이스 1개에서 보안 뷰를 공유하려고 합니다.

데이터베이스, 데이터베이스 오브젝트, 공유, 계정 간의 관계
  1. 데이터베이스 database1 및 데이터를 만듭니다.

    CREATE DATABASE database1;
    CREATE SCHEMA database1.sch;
    CREATE TABLE database1.sch.table1 (id INT);
    CREATE VIEW database1.sch.view1 AS SELECT * FROM database1.sch.table1;
    
  2. 데이터베이스 database2 및 데이터를 만듭니다.

    CREATE DATABASE database2;
    CREATE SCHEMA database2.sch;
    CREATE TABLE database2.sch.table2 (id INT);
    
  3. 데이터베이스 database3 및 데이터를 만듭니다.

    CREATE DATABASE database3;
    CREATE SCHEMA database3.sch;
    CREATE TABLE database3.sch.table3 (id INT);
    
  4. database3 에서 공유할 데이터로 보안 뷰를 만듭니다.

    CREATE SECURE VIEW database3.sch.view3 AS
      SELECT view1.id AS View1Id,
             table2.id AS table2id,
             table3.id AS table3id
      FROM database1.sch.view1 view1,
           database2.sch.table2 table2,
           database3.sch.table3 table3;
    
  5. 공유를 생성한 다음 공유를 설정하는 데 필요한 권한을 부여합니다.

    CREATE SHARE share1;
    GRANT USAGE ON DATABASE database3 TO SHARE share1;
    GRANT USAGE ON SCHEMA database3.sch TO SHARE share1;
    
  6. 공유에 보안 뷰 view3 을 추가하는 데 필요한 권한을 부여합니다.

    보안 뷰 view3 이 추가 데이터베이스에서 참조한 데이터를 사용하려면 database1 및 database2 에 대한 REFERENCE_USAGE 권한을 공유에 부여해야 합니다.

    GRANT REFERENCE_USAGE ON DATABASE database1 TO SHARE share1;
    GRANT REFERENCE_USAGE ON DATABASE database2 TO SHARE share1;
    
    GRANT SELECT ON VIEW database3.sch.view3 TO SHARE share1;
    

복제 그룹을 사용하여 다른 리전의 계정에 데이터를 복제함으로써 이 데이터를 다른 리전의 컨슈머와 공유할 수 있습니다. 자세한 지침은 예 3: 여러 데이터베이스의 데이터 공유하기 섹션을 참조하십시오.

예 2: 별도의 데이터베이스에 보안 뷰 생성 및 공유하기

공급자가 고객 데이터를 별도의 데이터베이스에 저장하고 해당 데이터베이스에서 새 오브젝트를 생성하지 않기를 원합니다. 데이터를 공유하려면 공급자는 보안 뷰가 있는 새 데이터베이스를 생성하면 됩니다. 보안 뷰는 고객 데이터가 포함된 데이터베이스의 오브젝트(스키마, 테이블, 뷰)를 참조합니다.

데이터베이스, 데이터베이스 오브젝트, 공유, 계정 간의 관계

샘플 코드:

  1. 고객 데이터베이스 customer1_db 및 데이터를 만듭니다.

    CREATE DATABASE customer1_db;
    CREATE SCHEMA customer1_db.sch;
    CREATE TABLE customer1_db.sch.table1 (id INT);
    CREATE VIEW customer1_db.sch.view1 AS SELECT * FROM customer1_db.sch.table1;
    
  2. 고객 데이터베이스 customer2_db 및 데이터를 만듭니다.

    CREATE DATABASE customer2_db;
    CREATE SCHEMA customer2_db.sch;
    CREATE TABLE customer2_db.sch.table2 (id INT);
    
  3. 새 데이터베이스 new_db 및 스키마 sch 를 만듭니다.

    CREATE DATABASE new_db;
    CREATE SCHEMA new_db.sch;
    
  4. customer1_db 및 customer2_db 의 오브젝트를 참조하는 new_db 에 보안 뷰를 만듭니다.

    CREATE SECURE VIEW new_db.sch.view3 AS
      SELECT view1.id AS view1Id,
             table2.id AS table2ID
      FROM customer1_db.sch.view1 view1,
           customer2_db.sch.table2 table2;
    
  5. 공유를 생성한 다음 공유를 설정하는 데 필요한 권한을 부여합니다.

    CREATE SHARE share1;
    
    GRANT USAGE ON DATABASE new_db TO SHARE share1;
    GRANT USAGE ON SCHEMA new_db.sch TO SHARE share1;
    
  6. 공유에 보안 뷰 view3 을 추가하는 데 필요한 권한을 부여합니다.

    보안 뷰 view3 이 추가 데이터베이스에서 참조한 데이터를 사용하려면 customer1_db 및 customer2_db 에 대한 REFERENCE_USAGE 권한을 공유에 부여해야 합니다.

    GRANT REFERENCE_USAGE ON DATABASE customer1_db TO SHARE share1;
    GRANT REFERENCE_USAGE ON DATABASE customer2_db TO SHARE share1;
    
    GRANT SELECT ON VIEW new_db.sch.view3 TO SHARE share1;
    

Sharing data from multiple databases with consumers in other regions

복제 그룹을 사용하면 여러 데이터베이스의 데이터를 다른 리전 및 클라우드 플랫폼의 컨슈머 계정과 공유할 수 있습니다. 다른 리전의 Snowflake 계정에 데이터를 복제하려면 공유와 공유가 참조하는 각 데이터베이스를 그룹에 포함하십시오. 그런 다음 복제된 공유에 컨슈머 계정을 추가할 수 있습니다. 자세한 지침은 리전 및 클라우드 플랫폼 전체에서 안전하게 데이터 공유 섹션을 참조하십시오.