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

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. データベース 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. 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. 共有を作成し、共有のセットアップに必要な権限を付与します。

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