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

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

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

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

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

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

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

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

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

    注釈

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

  4. GRANT <privilege> ...TO SHARE を使用して共有するデータベース内の各スキーマに USAGE 権限を付与します。

  5. GRANT <privilege> ...TO SHARE を使用して共有するビューが参照するオブジェクトを含む追加の各データベースに REFERENCE_USAGE 権限を付与します。

  6. GRANT <privilege> ...TO SHARE を使用して共有するビューの SELECT 権限を付与します。

  7. ALTER SHARE を使用して、1つ以上のコンシューマアカウントを共有に追加します。

指定したアカウントで共有を使用する準備が整いました。

例1

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

Relationship between databases, database objects, shares, and accounts

サンプルコード:

-- Sample database 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;

-- Sample database database2
CREATE DATABASE database2;
CREATE SCHEMA database2.sch;
CREATE TABLE database2.sch.table2 (id int);

-- Sample database to be shared
CREATE DATABASE database3;
CREATE SCHEMA database3.sch;

-- Create a table in the database to be shared.
CREATE TABLE database3.sch.table3 (id int);

-- Sample view to be shared.
-- This will require granting REFERENCE_USAGE on database1 and database2
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;

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;

例2

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

Relationship between databases, database objects, shares, and accounts

サンプルコード:

-- Sample database customer1DB
CREATE DATABASE customer1DB;
CREATE SCHEMA customer1DB.sch;
CREATE TABLE customer1DB.sch.table1 (id int);
CREATE VIEW customer1DB.sch.view1 AS SELECT * FROM customer1DB.sch.table1;

-- Sample database customer2DB
CREATE DATABASE customer2DB;
CREATE SCHEMA customer2DB.sch;
CREATE TABLE customer2DB.sch.table2 (id int);

-- Sample database to be shared
CREATE DATABASE newDB;
CREATE SCHEMA newDB.sch;
-- Sample view to be shared
-- This will require granting REFERENCE_USAGE on customer1DB and customer2DB
CREATE SECURE VIEW newDB.sch.view3 AS
SELECT view1.id AS view1Id, table2.id AS table2ID
FROM customer1DB.sch.view1 view1,
   customer2DB.sch.table2 table2;

CREATE SHARE share1;
GRANT USAGE ON DATABASE newDB TO SHARE share1;
GRANT USAGE ON SCHEMA newDB.sch TO SHARE share1;

GRANT REFERENCE_USAGE ON DATABASE customer1DB TO SHARE share1;
GRANT REFERENCE_USAGE ON DATABASE customer2DB TO SHARE share1;

GRANT SELECT ON VIEW newDB.sch.view3 TO SHARE share1;