複数データベースからのデータの共有¶
Snowflakeデータプロバイダーは、セキュアビューを使用して複数のデータベースからデータを共有できます。セキュアビューは、それらのデータベースが同じアカウントに属している限り、1つ以上のデータベースに含まれるスキーマ、テーブル、その他のビューなどのオブジェクトを参照できます。
複数のデータベースのオブジェクトを参照するセキュアビューを共有することは、単一のデータベースに含まれるデータを共有することとは異なります。
データを共有するための標準ステップ をすべて実行することに加えて、共有するセキュアビューによって 参照される 各データベースで REFERENCE_USAGE 権限も付与する必要があります。ただし、セキュアビューを含むデータベースに対して REFERENCE_USAGE を付与する 必要はありません。
注釈
データベースロールを使用して、複数のデータベースのデータを共有することはできません。REFERENCE_USAGE 権限を データベースロール に付与することはできません。また、データベースロールを使用して、複数のデータベースのオブジェクトを参照するセキュアビューを共有に付与することもできません。
共有にセキュアビューを付与する 前に、 REFERENCE_USAGE 権限をセキュアビューで参照される各データベースに個別に付与する必要があります。
複数のデータベースのオブジェクトを参照するセキュアビューを共有するには、
ACCOUNTADMIN ロールまたは CREATE SHARE グローバル権限が付与されたロールを持つユーザーとしてSnowflakeアカウントに接続します。CREATE SHARE 権限の詳細については、 ACCOUNTADMIN 以外のロールによる、データ共有タスクの実行の有効化 をご参照ください。
CREATE SHARE を使用して共有を作成します。
GRANT <権限> ... TO SHARE を使用して共有するデータベースの USAGE 権限を付与します。
注釈
複数のデータベースに含まれるオブジェクトを参照するセキュアビューを共有している場合は、セキュアビューが作成されたデータベースに USAGE 権限のみを付与する必要があります。共有ごとに1つのデータベースにのみ USAGE を付与できます。
データベースに USAGE 権限を付与すると、共有がデータベースに関連付けられ、その関連付けは共有に他の権限を付与するために必要になります。
GRANT <権限> ... TO SHARE を使用して共有するデータベース内の各スキーマに USAGE 権限を付与します。
GRANT <権限> ... TO SHARE を使用して共有するビューが参照するオブジェクトを含む追加の各データベースに REFERENCE_USAGE 権限を付与します。
GRANT <権限> ... TO SHARE を使用してビューに SELECT 権限を付与することで、ビューを共有に追加します。
ALTER SHARE を使用して、1つ以上のコンシューマアカウントを共有に追加します。
指定したアカウントで共有を使用する準備が整いました。
注釈
別のデータベースの UDF を参照するセキュアビューを共有するには、 UDF をセキュアにする必要があります。セキュア UDF の作成に関する詳細については、 セキュア UDF またはストアドプロシージャの作成 をご参照ください。
例¶
セキュアビューの作成については、以下の例をご参照ください。
例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データベース
database2
とデータを作成します。CREATE DATABASE database2; CREATE SCHEMA database2.sch; CREATE TABLE database2.sch.table2 (id INT);
Copyデータベース
database3
とデータを作成します。CREATE DATABASE database3; CREATE SCHEMA database3.sch; CREATE TABLE database3.sch.table3 (id INT);
Copydatabase3
で共有するデータでセキュアビューを作成します。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共有を作成し、共有のセットアップに必要な権限を付与します。
CREATE SHARE share1; GRANT USAGE ON DATABASE database3 TO SHARE share1; GRANT USAGE ON SCHEMA database3.sch TO SHARE share1;
Copyセキュアビュー
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;
Copy
複製グループを使用してデータを他のリージョンのアカウントに複製することで、このデータを他のリージョンのコンシューマーと共有することができます。手順については、 例3: 複数のデータベースからデータを共有する をご参照ください。
例2: 別のデータベースにセキュアビューを作成して共有する¶
プロバイダーは、顧客データを個別のデータベースに保存し、それらのデータベースに新しいオブジェクトを作成することを望みません。データを共有するために、プロバイダーはセキュアビューを持つ新しいデータベースを作成します。セキュアビューは、顧客データを使用してデータベース内のオブジェクト(スキーマ、テーブル、ビュー)を参照します。
サンプルコード:
顧客データベース
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顧客データベース
customer2_db
とデータを作成します。CREATE DATABASE customer2_db; CREATE SCHEMA customer2_db.sch; CREATE TABLE customer2_db.sch.table2 (id INT);
Copy新しいデータベース
new_db
とスキーマsch
を作成します。CREATE DATABASE new_db; CREATE SCHEMA new_db.sch;
Copynew_db
にcustomer1_db
とcustomer2_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共有を作成し、共有のセットアップに必要な権限を付与します。
CREATE SHARE share1; GRANT USAGE ON DATABASE new_db TO SHARE share1; GRANT USAGE ON SCHEMA new_db.sch TO SHARE share1;
Copyセキュアビュー
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;
Copy
複数のデータベースからのデータを他のリージョンのコンシューマーと共有する¶
複製グループを使用することで、複数のデータベースのデータを他のリージョンやクラウドプラットフォームのコンシューマーアカウントと共有することができます。別のリージョンのSnowflakeアカウントにデータを複製するには、共有と共有が参照する各データベースをグループに含めます。複製された共有にコンシューマーアカウントを追加することができます。詳細な手順については、 地域とクラウドプラットフォーム間で安全にデータを共有する をご参照ください。