共有の作成と設定

このトピックでは、データプロバイダーのアカウント作成と共有の構成、他のコンシューマーアカウントとの共有の共有、および共有の継続的なメンテナンスの実行に関連するタスクについて説明します。

このトピックの内容:

注意

Snowflakeでは、データ共有に携わっている HIPAA (および HITRUST)アカウントが相互に BAA に署名していることを保証する責任を負いません。これは、データを共有しているアカウントの裁量です。署名済みの BAA がない場合は、両方のアカウント、 特に プロバイダーアカウントの HIPAA (および HITRUST)コンプライアンスに影響する可能性があります。

また、Business Criticalアカウントをお持ちの場合は、SnowflakeにBusiness Critical以外のアカウントでSecure Data Sharingを有効にすることをリクエストする前に、次の点を考慮してデータ保護の期待レベルを維持するようにしてください。

  • 機密データを非Business Criticalアカウントと共有しないでください。

  • Business Criticalでないアカウントを作成して機密性の低いデータを保存し、このデータをBusiness Criticalでないアカウントと共有することを検討してください。

  • Tri-Secret Secure をBusiness Criticalアカウントと併用しており、他のアカウントとデータを共有している場合、Snowflakeは、これらのアカウントからのデータアクセスを自分のアカウント内から発生したかのように扱います。具体的には、コンシューマーアカウントへのアクセスを許可するには、ユーザーのSnowflakeアカウントをホストするクラウドプラットフォーム上のキー管理サービスに、Snowflakeがアクセスする必要がある場合があります。

これらは推奨事項にすぎず、Snowflakeによって強制されるものではありません。データを共有するかどうかは、常にデータプロバイダーの裁量に委ねられます。Snowflakeは、不適切に共有されたデータについて一切の責任を負いません。

一般的なデータ共有に関する考慮事項と使用法

共有を作成および維持するための以下の重要な使用法の詳細に注意します。

  • 地域とクラウドプラットフォーム間でデータを共有します。詳細については、 リージョンとクラウドプラットフォーム間で安全にデータを共有する をご参照ください。

  • 共有には、複数のデータベースからのデータを含めることができます。詳細については、 複数データベースからのデータの共有 をご参照ください。

  • コンシューマーのアカウントを共有に追加すると、そのコンシューマーがすぐに利用できるようになります。

  • 新しい行や変更された行については、共有からデータベースを作成したコンシューマーがすぐに利用できます。これは、コンシューマーがすでにアクセス権を持っている場合にのみ実現します。

  • 共有に付与されたデータベースで作成または再作成された新しいオブジェクトについては、コンシューマーが自動的に利用することは できません。例えば、あるオブジェクトをドロップしてから再作成した場合、名前が同じであっても新しいオブジェクトとみなされます。新しいオブジェクトをコンシューマーが利用できるようにするには、 GRANT <権限> ... TO SHARE コマンドを使用して、オブジェクトを共有に明示的に追加する必要があります。

  • データセキュリティとプライバシーの理由から、現時点では、共有では セキュアビュー のみがサポートされています。標準ビューが共有に追加されると、Snowflakeはエラーを返します。

  • データベース内のストリームにセキュアビューを作成し、それらのビューをコンシューマーと共有することはお勧めしません。このシナリオでは、別のアカウントのストリームを変更する機能が必要です。これはサポートされている操作ではないため、アンチパターンです。代わりに、コンシューマーがテーブル上に独自のストリームを作成し、共有するビューを保護できるようにします。詳細については、 共有オブジェクトのストリーム (このトピック内)をご参照ください。

  • Storage lifecycle policies aren't supported on shared tables. If you need to manage data retention for shared data, consider implementing retention logic in your application or using other data management strategies before sharing.

データ共有でSQLを使用する

共有するオブジェクトの準備は、どのロールを使用しても実行できます。共有の作成や共有へのコンシューマアカウントの追加など、その他のデータ共有タスクには、ACCOUNTADMINロールまたはグローバルCREATESHARE権限を付与されたロールが必要です。CREATE SHARE 権限の詳細については、 ACCOUNTADMIN 以外のロールによる、データ共有タスクの実行の有効化 をご参照ください。

DDLを使用してデータベースロールの作成と管理に使用する場合は、ここに示すコマンドを使用してください:

DDL を使用して共有のデータベースオブジェクトへのアクセスを表示、付与、または取り消す場合、ここに示すコマンドを使用してください。

共有を作成する準備

共有を作成する前に、共有する予定のSnowflakeオブジェクトを特定することをお勧めします。

  • データベース

  • テーブル

  • 動的テーブル

  • 外部テーブル

  • Externally managed and managed Apache Iceberg™ tables

  • Externally managed Delta Lake tables (with Delta Direct and catalog-linked databases)

  • セキュアビュー

  • 安全なマテリアライズドビュー

  • セマンティックビュー

  • Cortex Searchサービス

  • ユーザー定義関数 (UDFs) (セキュリティおよび非セキュリティ)

  • Models of type USER_MODEL, CORTEX_FINETUNED, or DOC_AI

これにより、特にテーブルのデータのサブセットのみを共有することにした場合、追加の計画および管理タスクが必要になる可能性があります。

データベースとテーブル

データベースを共有する予定の場合、準備はほとんどまたはまったく必要ありません。

テーブル全体をシェアする場合は、準備は不要です。

ただし、特定の条件に基づいて、またはコンシューマーアカウントによって、テーブル(またはテーブルのセット)のデータをフィルター処理する場合、1つ以上のセキュリティでセキュアビューをテーブルに作成する必要があります。

セキュアオブジェクト(ビュー、マテリアライズドビュー、および UDFs)

共有データベース内のデータへのアクセスを厳密に制御するには、 セキュアビューセキュアマテリアライズドビュー および/または セキュア UDFs を使用する 必要 があります。たとえば、日付やその他の条件でデータをフィルターすることを選択したり、単一の共有を使用して異なるコンシューマーアカウントの共有データを分割したりできます。セキュアオブジェクトを使用すると、ベーステーブルとビジネスロジックが公開されないようにしながら、データに適用する細分性のレベルを指定できます。

セキュアオブジェクトは、対応する CREATE <オブジェクト> または ALTER <オブジェクト> コマンドを使用して、標準オブジェクトと同様に定義されます。ただし、次の重要な使用情報に注意します。

  • 完全修飾名(つまり、 <データベース名>.<スキーマ名>.<テーブル名> )でテーブルを参照する安全なオブジェクトは、共有に含めることができます。ただし、参照されるデータベース名が共有のデータベースと 一致 することを確認する必要があります。

  • 定義に CURRENT_USER または CURRENT_ROLE 関数を使用するセキュアオブジェクトを含め ない でください。これらの関数によって返されるコンテキスト値は、コンシューマーのアカウントに関連性がなく、クエリ/使用時にオブジェクトが失敗します。

  • 安全なオブジェクトを定義してコンシューマーアカウントと共有する場合、実行する重要な追加のステップは、表示するデータのみを表示するようにオブジェクトが正しく構成されていることを検証することです。これは、データが共有されるアカウントに基づいてデータアクセスを制限する場合に特に重要です。この検証の実行を容易にするために、Snowflakeは、 SIMULATED_DATA_SHARING_CONSUMER セッションパラメーターを提供します。SIMULATED_DATA_SHARING_CONSUMER セッションパラメーターは、セキュアビューとセキュアマテリアライズドビューのみをサポートしており、セキュア UDFs はサポートしていません。セッションでこのパラメーターを設定すると、ビューを共有する予定のコンシューマーアカウント内にあるいずれかのユーザーとして、セキュアビューのクエリをシミュレートできます。

    例えば、コンシューマーアカウント xy12345 の場合:

    ALTER SESSION SET SIMULATED_DATA_SHARING_CONSUMER = xy12345;
    
    Copy

詳細な例については、 セキュアオブジェクトを使用したデータアクセスの制御を使用する をご参照ください。

共有オブジェクトのストリーム

データコンシューマーは、ソーステーブルまたはビューに加えられたデータ操作言語(DML)の変更を記録するストリームを独自のデータベースに作成できます。

注釈

ここに記載されている操作はサポートされていません:

  • セカンダリソースオブジェクトの共有に追加のみのストリームを作成することはサポートされていません。

  • 他のアカウントのストリームを変更することはサポートされていません。

コンシューマーは、共有テーブルまたはセキュアビューでストリームを作成できます。その前に、テーブルのデータ保持期間を延長し、共有テーブルまたは共有ビューの基礎となるテーブルの変更追跡を有効にする必要があります。CREATE TABLE または ALTER TABLE を使って、テーブルを作成または変更する際に CHANGE_TRACKING と DATA_RETENTION_TIME_IN_DAYS パラメータを設定します。

変更の追跡を有効にする:

現在、ローカルテーブルの最初のストリームが作成されると、非表示の列のペアがテーブルに自動的に追加され、変更追跡メタデータの保存が開始されます。共有のコンシューマーはソースデータベースを変更できないため、この変更は共有テーブルでは不可能です。代わりに、共有を目的としたテーブルの変更の追跡を有効にするには、各テーブルで ALTER TABLE ... CHANGE_TRACKING = TRUE を実行します。

テーブルのデータ保持期間を延長する:

ローカルテーブルのストリームが定期的に消費されない場合、Snowflakeは古さを回避するために、ソーステーブルのデータ保持期間を一時的に延長します。

共有テーブルのストリームは、テーブルのデータ保持期間を延長しません。同様に、共有ビューのストリームは、基になるテーブルのデータ保持期間を延長しません。共有テーブルまたは共有ビューの基になるテーブルに長期のデータ保持期間を手動で指定するには、テーブルの DATA_RETENTION_TIME_IN_DAYS パラメーターを設定します。

共有タグの参照

データ共有プロバイダーは、オブジェクトにタグを設定し、タグとタグ付きオブジェクトの両方をデータ共有コンシューマーと共有することができます。さらに、コンシューマーは共有オブジェクトのタグ参照を利用できます。タグ参照を共有すると、プロバイダーは、タグ文字列の値に基づいたテーブルまたは列のデータ感度など、共有オブジェクトに関する追加のコンテキストを共有することができます。

コンシューマーは、 SQL 使用して、共有オブジェクトのタグ割り当てを表示し、共有オブジェクトのタグ参照を決定することができます。共有オブジェクトのタグ割り当てと参照を表示すると、コンシューマーアカウント内のデータスチュワードは、データの出所とデータの使用方法について、より包括的に評価することができます。このような新しい洞察により、規制遵守要件を促進することができます。

プロバイダーは、タグ付けされたオブジェクトと同じデータベースにタグを作成し、このデータベースを共有する必要があります。データベースを共有した後、プロバイダーが共有オブジェクトからタグの設定を解除すると、タグの割り当て変更はコンシューマーアカウントでも発生します。タグの設定が解除されると、コンシューマーはタグを使用して共有オブジェクトを追跡できなくなります。タグの設定を解除することにより、プロバイダーは、オブジェクトに不注意にタグが付けられた場合でも、データの裁量権を維持できます。

タグ継承 は、共有データベース内のタグ付きオブジェクトに適用されます。たとえば、プロバイダーが共有データベース内のスキーマにタグを設定すると、そのスキーマ内のオブジェクトと列にもタグが設定されます。しかし、コンシューマーは、Information Schema TAG_REFERENCES テーブル関数を使用して、プロバイダーがタグを最初に設定した場所を特定することはできません。Snowflakeは、タグが最初に設定された場所を明らかにしないことによってデータプロバイダーを保護するために、テーブル関数の出力で LEVEL 列の値を非表示にします。

重要

共有タグは読み取り専用です。コンシューマーは、自分のアカウントのオブジェクトに共有タグを設定することはできません。

プロバイダーオプション

プロバイダーには、タグを共有するために以下のオプションがあります。

  • SQL を使用して、共有がタグにアクセスすることを許可し、コンシューマーが共有オブジェクト上の共有タグの割り当てを表示できるようにします。

    プロバイダーは、コンシューマーがタグを利用できるようにするために、各タグに対する READ 権限を付与する必要があります。

    GRANT READ ON TAG mydb.tags.tag1 TO SHARE my_share;
    
    GRANT USAGE ON DATABASE mydb TO SHARE my_share;
    GRANT USAGE ON SCHEMA mydb.tags TO SHARE my_share;
    
    Copy
  • データベースロールを作成 し、タグに対する READ 権限をデータベースロールに付与し、 データベースロールを共有に付与 します。データベースロールには、タグを格納するスキーマに対する USAGE 権限も必要です。

    GRANT READ ON TAG mydb.tags.tag1 TO DATABASE ROLE my_db_role;
    GRANT USAGE ON SCHEMA mydb.tags TO DATABASE ROLE my_db_role;
    GRANT DATABASE ROLE my_db_role TO SHARE my_share;
    
    Copy
コンシューマーオプション

コンシューマーには、コンシューマーアカウントで共有タグを表示するために以下のオプションがあります。

  • ACCOUNTADMIN ロールを使用します。コンシューマーアカウントの管理者は、プロバイダーが利用可能にした共有タグを表示できます。

  • IMPORTED PRIVILEGES のあるロールを使用します。共有から作成されたデータベースに対する IMPORTED PRIVILEGES を持つロールを付与されたか継承したアカウントロールは、プロバイダーが利用可能にした共有タグを表示することができます。

    GRANT IMPORTED PRIVILEGES ON DATABASE db_share TO ROLE db_share_role;
    
    Copy
  • 共有データベースロールを使用します。プロバイダーがタグに対する READ 権限をデータベースロールに付与し、データベースロールを共有する場合、コンシューマーは共有されたデータベースロールを自分のアカウントのアカウントロールに付与することができます。

    GRANT DATABASE ROLE my_db_role TO ROLE consumer_analyst_role;
    
    Copy

コンシューマーアカウントでは、 SQL を使用して、プロバイダーが共有するタグ、タグ参照、タグ付きオブジェクトを表示できます。

現在、コンシューマーアカウントでは、プロバイダーが共有するタグ、タグ参照、タグ付きオブジェクトを表示するために、以下のオプションを使用することはできません。

共有の作成

共有を作成するには、 ACCOUNTADMIN ロールまたは CREATE SHARE グローバル権限を付与されたロールを使用する必要があります。

Using Snowsight to create a share

Snowsight でデータを共有するには、複数の方法があります。

  • Snowflake Marketplace を使用して、特定のコンシューマーにリストを提供するか Provider Studio で公開します。リストの作成および公開 をご参照ください。

  • データ交換 でリストを公開します。

  • 直接共有を作成して、自分のリージョンのコンシューマーアカウントとデータを共有します。

他のデータベースのオブジェクトを参照するセキュアビューを追加する必要がある共有を作成する場合は、SQLを使用して共有を作成する必要があります。詳細については、 複数データベースからのデータの共有 をご参照ください。

直接共有を作成するには:

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data sharing » Private sharing を選択します。

  3. Share » Create a Direct Share を選択します。Share Data ダイアログが開きます。

  4. データ共有ダイアログで、 + Select Data を選択します。

    1. ソースデータベースを選択します。

    2. ソースデータベースからターゲットオブジェクト(複数可)を選択します。

    3. オプションとして、共有用に作成された Secure Share Identifier を更新します。

    4. 必要に応じて、 Description を入力します。

    5. 残りのテキストボックスに、アカウントロケーターを入力します。アカウントロケーターの一部を入力すると、入力したテキストに一致するすべてのアカウントがリストされます。必要に応じて繰り返しさらにアカウントを追加します。共有に追加できるのは、同じリージョン内のアカウントのみです。

    6. Create Share を選択します。

アクティブなコンシューマーとの直接共有をリストに変換する場合は、 直接共有をリストに変換する をご参照ください。

SQLを使った共有の作成

SQLを使用して共有を作成するには、

  1. CREATE SHARE コマンドを使用して、空の共有を作成します。

  2. GRANT <権限> ... TO SHARE コマンドを使用してデータベースを共有に追加し、特定のデータベースオブジェクト(スキーマ、テーブル、およびセキュアビュー)へのアクセスを共有に選択的に許可します。

  3. ALTER SHARE コマンドを使用して、共有への1つ以上のアカウントアクセスを追加します。

注釈

次の手順では、 prvdr1 という名前のプロバイダーアカウントが、 xy12345 および yz23456 という名前の2つのコンシューマーアカウントとデータを共有していることを前提としています。

DDLを使用した共有の作成と管理

共有の作成と管理には、ここにリストされたDDLコマンドを使用します。

ステップ1: 空の共有を作成する

次の例では、 sales_s という名前の空の共有を作成します。

CREATE SHARE sales_s;
Copy

ステップ2: 共有にデータベースおよびオブジェクトへの権限を付与する

オブジェクト(データベース、スキーマ、テーブル、セキュア ビューなど)を共有に追加します。これらのオブジェクトに対する権限をデータベースロール経由で共有に追加するか、オブジェクトに対する権限を共有に直接付与するかの いずれか を選択できます。これらのオプションの詳細については、 データベースオブジェクトの共有方法 をご参照ください。

オプション1:

次の例は、データベースロールを作成し、次のオブジェクトに対する権限をデータベースロールに付与してから、前のステップで作成した sales_s 共有にデータベースロールを付与する方法を示しています。

  • sales_db (データベース)

  • aggregates_eula (スキーマ)

  • aggregate_1 (テーブル)

CREATE DATABASE ROLE sales_db.dr1;

GRANT USAGE ON DATABASE sales_db TO DATABASE ROLE sales_db.dr1;

GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO DATABASE ROLE sales_db.dr1;

GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO DATABASE ROLE sales_db.dr1;

GRANT USAGE ON DATABASE sales_db TO SHARE sales_s;

GRANT DATABASE ROLE sales_db.dr1 TO SHARE sales_s;
Copy
オプション2:

共有にオブジェクトを含めるには、各オブジェクトに権限を付与します。権限を付与する場合、コンテナーオブジェクトの使用を許可する前に、まずコンテナー内のオブジェクトの使用を許可します。たとえば、データベースに含まれるスキーマの使用を許可する前に、データベースの使用を許可します。

注釈

アカウントを共有に追加する前に、このタスクを実行します。データベースの使用を許可する前にアカウントを追加しようとすると、エラーが発生します。

次の例は、前の手順で作成した sales_s 共有に次のオブジェクトの権限を付与する方法を示しています。

  • sales_db (データベース)

  • aggregates_eula (スキーマ)

  • aggregate_1 (テーブル)

GRANT USAGE ON DATABASE sales_db TO SHARE sales_s;

GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO SHARE sales_s;

GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO SHARE sales_s;
Copy

共有の内容を確認するには、

SHOW GRANTS TO SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

これにより、共有が他のアカウントで使用できるようになる前に、共有が正しく構成されます。

ステップ3: アカウントを共有に追加する

注意

Business Criticalアカウントを所有しており、消費者アカウントとデータを共有している場合:

  • Snowflakeは、非Business Criticalアカウントとの機密データの共有をサポートしています(デフォルトでは無効)が、そうすることを推奨 しません

  • HIPAA と HITRUST 要件への準拠を確保するために、Snowflakeは、HIPAA アカウントが非 HIPAA アカウントとデータを共有することを許可 しません

  • Tri-Secret Secure を使用している場合、Snowflakeは、ユーザーアカウントからのデータアクセスを自分のアカウント内から発生したかのように扱います。

次の例では、2つのアカウントを sales_s 共有に追加します。

ALTER SHARE sales_s ADD ACCOUNTS=xy12345, yz23456;
Copy

アカウント xy12345 および yz23456 は共有を表示し、そこからデータベースを作成できるようになりました。

注釈

アカウントを共有に追加するときに、アカウントが存在しない場合、コマンドは正常に完了しますが、共有は更新されません。共有が適切に更新されるようにするには、アカウントが存在し、名前を正しく入力したことを確認します。

SHOW SHARES を使用して共有を確認します。コマンドの出力には、 sales_s 共有がリストされます。kind 列は、共有が OUTBOUNDであることを示します。これは、この共有が他のSnowflakeアカウントとデータベースを共有していることを意味します。to 列には、共有が使用可能になったすべてのアカウントがリストされます。

SHOW SHARES;
Copy
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| created_on                    | kind     | owner_account        | name          | database_name         | to               | owner        | comment                                | listing_global_name |
|-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------|
| 2017-07-09 19:18:09.821 -0700 | INBOUND  | SNOW.XY12345         | SALES_S2      | UPDATED_SALES_DB      |                  |              | Transformed and updated sales data     |                     |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S       | SALES_DB              | XY12345, YZ23456 | ACCOUNTADMIN |                                        |                     |
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+

共有の維持

共有の管理には、 OWNERSHIP 権限と CREATE SHARE グローバル権限を持つロールを使用する必要があります。

共有へのオブジェクトの追加

オブジェクトは、いつでも既存の共有に追加できます。共有に追加したオブジェクトは、共有からデータベースを作成したコンシューマーアカウントですぐに利用できます。たとえば、共有にテーブルを追加すると、コンシューマーアカウントのユーザーは、テーブルが共有に追加されるとすぐにテーブル内のデータをクエリできます。

重要

異なる リージョン または クラウドプラットフォーム のデータコンシューマーと安全にデータを共有することを予定している場合、データベースに何らかのタイプのオブジェクトが含まれている場合には、プライマリデータベースの複製がブロックされることに注意してください。更新操作が失敗する原因となるオブジェクトの完全なリストについては、 複製の現在の制限 をご参照ください。

Using Snowsight to add objects to a share

Snowsight を使用して、共有に関連付けられたデータを変更するには、

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data sharing » Private sharing を選択します。

  3. Shared by Your Account タブを選択します。

  4. 変更する共有を検索し、選択します。

  5. Data セクションで、 Edit を選択します。

  6. 追加するデータを選択します。

  7. Done を選択します。

注釈

ウェブインターフェイスは現在、外部テーブル、安全なマテリアライズドビュー、安全な UDFs を共有に追加、または共有から削除することをサポートしていません。共有内のオブジェクトの管理すべては、 SQL を使用して実行する必要があります。

ウェブインターフェイスを使用して、他のデータベースのオブジェクトを参照するセキュアビューを共有に追加することはできません。SQLを使用して共有を作成する必要があります。複数データベースからのデータの共有 をご参照ください。

SQLを使ってオブジェクトを共有に追加する

GRANT <権限> ... TO SHARE コマンドを使用します。

注釈

  • オブジェクトのスキーマが既に共有にある場合は、オブジェクトを追加するだけです。

  • オブジェクトのスキーマがまだ共有にない場合は、最初にスキーマを追加してからオブジェクトを追加する必要があります。

次の例では、 aggregates_eula スキーマの agg_secure という名前のセキュアビューを sales_s 共有に追加します。

SHOW GRANTS TO SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+

GRANT SELECT ON VIEW sales_db.aggregates_eula.agg_secure TO SHARE sales_s;

SHOW GRANTS TO SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-17 12:33:15.310 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGG_SECURE  | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

共有からのオブジェクトの削除

オブジェクトは、いつでも既存の共有から削除できます。共有から削除したオブジェクトは、共有からデータベースを作成したコンシューマーアカウントではすぐに使用できなくなります。

たとえば、共有からテーブルを削除すると、コンシューマーアカウントのユーザーは、共有からテーブルが削除されるとすぐにテーブル内のデータをクエリできなくなります。

注釈

ウェブインターフェイスは現在、外部テーブル、安全なマテリアライズドビュー、安全な UDFs を共有に追加、または共有から削除することをサポートしていません。共有内のオブジェクトの管理すべては、 SQL を使用して実行する必要があります。

Using Snowsight to remove objects from a share

Snowsight を使用して、共有に関連付けられたデータを削除するには、

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data sharing » Private sharing を選択します。

  3. Shared by Your Account タブを選択します。

  4. 変更する共有を検索し、選択します。

  5. Data セクションで、 Edit を選択します。

  6. 共有内のデータを選択し、共有から削除するデータのチェックボックスの選択を解除します。

  7. Done を選択します。

SQLを使って共有からオブジェクトを削除する

REVOKE <権限> ... FROM SHARE コマンドを使用して、既存の共有からいつでもオブジェクトを削除できます。

次の例では、 aggregates_eula スキーマの agg_secure という名前のセキュアビューを sales_s 共有から削除します。

SHOW GRANTS TO SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-17 12:33:15.310 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGG_SECURE  | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+

REVOKE SELECT ON VIEW sales_db.aggregates_eula.agg_secure FROM SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

共有へのアカウントの追加

アカウントは、いつでも既存の共有に追加できます。アカウントが共有に追加されると、共有はすぐにアカウントに「表示」され、アカウントは共有からデータベースを作成し、データベース内のSnowflakeオブジェクトのクエリを開始できます。

Using Snowsight to add accounts to a share

Snowsight を使用して、コンシューマーを既存の共有に追加するには、

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data sharing » Private sharing を選択します。

  3. Shared by Your Account タブを選択します。

  4. 変更する共有を検索します。

  5. Shared With セクションで、 Add Consumers を選択します。

  6. Share With Snowflake Accounts には、1つ以上のアカウントロケーターを入力します。アカウントロケーターの一部を入力すると、一致するすべてのアカウントがリストされます。

  7. Add を選択します。

SQLを使って共有にアカウントを追加する

SQL を使用して、コンシューマー既存の共有に追加するには、 ALTER SHARE コマンドを使用します。

共有からのアカウントの削除

アカウントは、いつでも既存の共有から削除できます。共有からアカウントを削除すると、共有から作成したデータベースが即座に無効になります。アカウントのユーザーがデータベースに対して実行するすべてのクエリ、およびその他の操作は機能しなくなります。

共有からアカウントを削除した後、共有に再度追加できます。ただし、以前に共有から作成したデータベースは復元されません。共有から新しいデータベースを作成する必要があります。

注釈

共有からアカウントを削除する前に、アカウントの削除がアカウントに与えるダウンストリームの影響を考慮します。データベースは即座に無効になるため、ユーザー(アカウント内)がデータベースに対して実行するすべてのクエリやその他の操作は機能しなくなり、アカウントのビジネスオペレーションに大きな影響を与える可能性があります。

Using Snowsight to remove accounts from a share

Snowsight を使用して、既存の共有からコンシューマーを削除するには、

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data sharing » Private sharing を選択します。

  3. Shared by Your Account タブを選択します。

  4. 変更する共有を検索し、選択します。

  5. Shared With セクションで、 ... » Remove を選択します。

  6. 確認ダイアログで、 Remove を選択します。

SQLを使用して共有からアカウントを削除する

ALTER SHARE コマンドを使用して、既存の共有からアカウントを削除します。

共有のアカウントの新しいリストを設定し、目的のアカウントをリストから外して、共有からアカウントを削除します。

共有のドロップ

共有は、随時ドロップ(削除)できます。共有をドロップすると、共有からコンシューマーアカウントによって作成されたすべてのデータベースが即座に無効になります。これらのデータベースで実行されるすべてのクエリおよびその他の操作は機能しなくなります。

共有をドロップした後、同じ名前で共有を再作成できます。ただし、これにより、コンシューマーアカウントによる共有から作成されたデータベースは復元されません。再作成された共有は新しい共有として扱われ、すべてのコンシューマーアカウントは新しい共有から新しいデータベースを作成する必要があります。

注釈

共有をドロップする前に、共有を使用するすべてのコンシューマーアカウントに与えるダウンストリームの影響を考慮します。

代わりに、共有から個々のオブジェクトを削除することも検討できます。削除されたオブジェクトは、コンシューマーアカウントの側で追加のタスクを必要とせずに共有に追加できます。

Using Snowsight to drop a share

Snowsight を使用して共有をドロップするには、

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data sharing » Private sharing を選択します。

  3. Shared by Your Account タブを選択します。

  4. ドロップする共有を検索し、選択します。

  5. ... » Drop を選択します。

  6. 確認ダイアログで、 Drop を選択します。

SQLを使用して共有をドロップする

DROP SHARE コマンドを使用して共有をドロップします。

共有からデータベースを作成したコンシューマーの表示

共有からデータベースを作成したアカウントを表示するには、 SHOW GRANTS OF SHARE コマンドを使用します。このコマンドの出力は、 SHOW SHARES が返すアカウントリストとは次の点で異なります。

  • SHOW SHARES アカウントで使用可能なすべての共有と、各共有にアクセスできるアカウントを一覧表示します。

  • SHOW GRANTS OF SHARE 共有からデータベースを作成したすべてのアカウントをリストします。アカウントが共有からデータベースを作成していない場合、結果は空です。

たとえば、次の例に示します。

  • 所有者アカウント SNOW.PRVDR1 によって、2つの共有、 sales_s および sales_s2 がアカウント xy12345 および yz23456 で利用可能になりました。

  • アカウント xy12345 は、 prvdr1.sales_s 共有からデータベースを作成しました。

  • sales_s2 共有からデータベースを作成したアカウントはありません。

SHOW SHARES;
Copy
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| created_on                    | kind     | owner_account        | name          | database_name         | to               | owner        | comment                                | listing_global_name |
|-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------|
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.PRVDR1          | SALES_S       | SALES_DB              | XY12345, YZ23456 | ACCOUNTADMIN |                                        |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.PRVDR1          | SALES_S2      | SALES_DB              | XY12345, YZ23456 | ACCOUNTADMIN |                                        |                     |
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
SHOW GRANTS OF SHARE sales_s;
Copy
+-------------------------------+----------------+------------+----------+
| created_on                    | share          | granted_to | account  |
|-------------------------------+----------------+------------+----------|
| 2017-06-15 18:00:03.803 -0700 | PRVDR1.SALES_S | ACCOUNT    | XY12345  |
+-------------------------------+----------------+------------+----------+
SHOW GRANTS OF SHARE sales_s2;
Copy
+------------+-------+------------+---------+
| created_on | share | granted_to | account |
|------------+-------+------------+---------|
+------------+-------+------------+---------+

共有とデータの表示

Snowsight を使用すると、リスト、直接共有、またはデータ交換の一部としてアカウントで共有されたデータを表示できます。

アカウントで共有されているデータを表示するには、以下を実行します。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Data sharing » Private sharing を選択します。

  3. Shared by Your Account タブを選択します。

このページでは、次を実行できます。

  • 作成した共有、またはアクセス権限がある共有を表示する。これには、共有のデータベース、コンシューマーカウント(ある場合)、共有への追加、共有の作成日、共有オブジェクトなどの情報が含まれます。

  • Snowflake Marketplace で、特定のコンシューマー向けに特別に提供されるリストや、あらゆるコンシューマーが利用できるリストに関連する共有を検索する。

  • プライベートデータ交換内で共有される共有にアクセスする。

次のフィルターを使用して、共有データを並べ替えることができます。

  • All Types ドロップダウンリストを使用してタイプ別にフィルタリングします。安全な共有またはデータ交換で共有されたリストのみ表示することを選択します。安全な共有には、リストに関連付けられた共有もあります。

  • Shared With ドロップダウンリストで、コンシューマーアカウントまたはデータ交換別にフィルタリングします。1つ以上の特定のコンシューマーまたはデータ交換を選択して、選択項目に関連付けられたすべての共有またはリストを表示します。

共有とデータの管理

共有を選択して、共有を管理するか、個別コンシューマーアカウントの共有へのアクセス権を取り消すか、共有に説明を追加します。リストとして提供されている安全な共有の管理、または Snowflake Marketplace でのリストの管理には、 Provider Studio を使用します。