複数データベースからのデータの共有

Snowflakeデータプロバイダーは、セキュアビューを使用して、異なるデータベースにあるデータを共有できます。セキュアビューは、同じアカウントに属している限り、1つ以上のデータベースからスキーマ、テーブル、その他のビューなどのオブジェクトを参照できます。

複数のデータベースのオブジェクトを参照するセキュアビューを共有するプロセスは、単一のデータベースにあるデータの共有とは異なります。

データを共有するための標準ステップ をすべて実行することに加えて、共有するセキュアビューによって参照される各データベースで REFERENCE_USAGE 権限を付与する必要があります。ただし、セキュアビューが作成されるデータベースに対する REFERENCE_USAGE を付与する必要はありません。

重要

複数のデータベースのオブジェクトを共有に含めるために、REFERENCE_USAGE 権限を データベースロール に付与することはできません。この制限は、別のデータベースに1つ以上の基になるテーブルを持つセキュアビューなどのオブジェクトにも適用されます。

複数のデータベースを共有に含めるには、オブジェクトに対する権限を共有に直接付与する必要があります。このオプションの詳細については、 オプション2: 共有への権限の直接付与 をご参照ください。

ビューを共有に追加する 前に 、ビューで参照される各データベースに個別に権限を付与する必要があります(つまり、ビューの SELECT 権限を共有に付与)。

複数のデータベースのオブジェクトを参照するセキュアビューを共有するには、

  1. ACCOUNTADMIN ロールまたは CREATE SHARE グローバル権限が付与されたロールを持つユーザーとしてSnowflakeアカウントに接続します。CREATE SHARE 権限の詳細については、 ACCOUNTADMIN 以外のロールによる、データ共有タスクの実行の有効化 をご参照ください。

  2. CREATE SHARE を使用して共有を作成します。

  3. GRANT <権限> ... TO SHARE を使用して共有するデータベースの USAGE 権限を付与します。

    注釈

    複数のデータベースに属するオブジェクトを参照するセキュアビューを共有している場合は、セキュアビューが作成されたデータベースにのみ USAGE 権限を付与する必要があります。共有ごとに1つのデータベースにのみ 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: 既存のデータベースにセキュアビューを作成して共有する

データとビジネスニーズの特性に基づいてデータをさまざまなデータベースに編成したプロバイダーは、データベースのデータを他のデータベースのオブジェクト(例: スキーマ、テーブル、ビュー)と結合するセキュアビューを共有したいと考えています。

Relationship between databases, database objects, shares, and accounts
  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. 共有を作成し、必要なすべての権限を付与します。

    セキュアビュー view3 が追加のデータベースで参照するデータには、 database1database2 の REFERENCE_USAGE 権限を共有に付与する必要があります。

    CREATE SHARE share1;
    GRANT USAGE ON DATABASE database3 TO SHARE share1;
    GRANT USAGE ON SCHEMA database3.sch TO SHARE share1;
    
    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: 別のデータベースにセキュアビューを作成して共有する

プロバイダーは、顧客データを個別のデータベースに保存し、それらのデータベースに新しいオブジェクトを作成することを望みません。データを共有するために、プロバイダーはセキュアビューを持つ新しいデータベースを作成します。セキュアビューは、顧客データを使用してデータベース内のオブジェクト(スキーマ、テーブル、ビュー)を参照します。

Relationship between databases, database objects, shares, and accounts

サンプルコード:

  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. new_dbcustomer1_dbcustomer2_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. 共有を作成し、必要なすべての権限を付与します。

    セキュアビュー view3 が追加のデータベースで参照するデータには、 customer1_dbcustomer2_db の REFERENCE_USAGE 権限を共有に付与する必要があります。

    CREATE SHARE share1;
    
    GRANT USAGE ON DATABASE new_db TO SHARE share1;
    GRANT USAGE ON SCHEMA new_db.sch TO SHARE share1;
    
    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アカウントにデータを複製するには、共有と共有が参照する各データベースをグループに含めます。複製された共有にコンシューマーアカウントを追加することができます。詳細な手順については、 地域とクラウドプラットフォーム間で安全にデータを共有する をご参照ください。