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

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;
    
    Copy
  2. 데이터베이스 database2 및 데이터를 만듭니다.

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

    CREATE DATABASE database3;
    CREATE SCHEMA database3.sch;
    CREATE TABLE database3.sch.table3 (id INT);
    
    Copy
  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;
    
    Copy
  5. 공유를 생성한 다음 공유를 설정하는 데 필요한 권한을 부여합니다.

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

    보안 뷰 view3 이 추가 데이터베이스에서 참조한 데이터를 사용하려면 database1database2 에 대한 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;
    
    Copy

복제 그룹을 사용하여 다른 리전의 계정에 데이터를 복제함으로써 이 데이터를 다른 리전의 컨슈머와 공유할 수 있습니다. 자세한 지침은 예 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;
    
    Copy
  2. 고객 데이터베이스 customer2_db 및 데이터를 만듭니다.

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

    CREATE DATABASE new_db;
    CREATE SCHEMA new_db.sch;
    
    Copy
  4. customer1_dbcustomer2_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;
    
    Copy
  5. 공유를 생성한 다음 공유를 설정하는 데 필요한 권한을 부여합니다.

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

    보안 뷰 view3 이 추가 데이터베이스에서 참조한 데이터를 사용하려면 customer1_dbcustomer2_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;
    
    Copy

여러 데이터베이스의 데이터를 다른 리전의 컨슈머와 공유하기

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