共有の操作

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

共有するオブジェクトを準備する(任意のロールの使用が可能)場合を除き、これらのタスクを実行するには、 ACCOUNTADMIN ロール(または CREATE SHARE グローバル権限が付与されたロール)を使用する必要があります。CREATE SHARE 権限の詳細については、 ACCOUNTADMIN 以外のロールによる、データ共有タスクの実行の有効化 をご参照ください。

このトピックの内容:

データ共有とBusiness Criticalアカウント

Business Criticalアカウントをお持ちの場合、他の(つまり、コンシューマー)アカウントとデータを共有するための次の条件に注意します。

プロバイダー

コンシューマー

サポート対象

有効化

注意

Business Critical ( HIPAA と HITRUST を使用)

から

Business Critical ( HIPAA と HITRUST を使用)

HIPAA アカウントの両方で、相互に署名済みの BAA が必要です。

Business Critical ( HIPAA と HITRUST を使用)

から

他のすべてのエディション

詳細については、 Business CriticalアカウントからBusiness Critical以外のアカウントへの共有を有効にする をご参照ください。

Business Critical

から

Business CriticalまたはBusiness Critical ( HIPAA と HITRUST を使用)

Business Critical

から

他のすべてのエディション

詳細については、 Business CriticalアカウントからBusiness Critical以外のアカウントへの共有を有効にする をご参照ください。

他のすべてのSnowflakeエディションの場合:

注意

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

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

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

  • 2つ目の非Business Criticalアカウントを作成して、機密性の低いデータを保存し、このデータを非Business Criticalアカウントと共有することを検討します。

  • Business CriticalアカウントでTri-Secret Secureを使用しており、他のアカウントとデータを共有している場合、Snowflakeは、これらのアカウントからのデータアクセスを自分のアカウント内から発生したかのように扱います。具体的には、コンシューマーアカウントへのアクセスを許可するには、Snowflakeが AWS KMSにアクセスする必要がある場合があります。

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

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

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

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

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

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

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

  • アカウントを共有に追加すると、共有はすぐにアカウントで使用できるようになります。

  • 同じコンシューマーアカウントの異なる共有を介して同じデータベースのテーブルを共有している場合、コンシューマーが共有の1つからデータベースを作成すると、インポートされたデータベースにすべての共有テーブルが表示されます。これを防ぐには、共有するテーブルごとに個別のスキーマを作成します。

  • 共有内のテーブル(または共有内のビューによって参照されるテーブル)の新しい行と変更された行は、共有からデータベースを作成したすべてのコンシューマーによってすぐに利用できます。これらのテーブルを更新するときは、この点に留意します。

  • 共有内のデータベースで作成された新しいオブジェクトは、コンシューマーが自動的に利用することはでき ません

    オブジェクトをコンシューマーが利用できるようにするには、 GRANT <権限> ... TO SHARE コマンドを使用して、オブジェクトを共有に明示的に追加する必要があります。

    注釈

    これは、データベースからドロップされ、データベース内で同じ名前で再作成されたオブジェクトにも適用されます。再作成されたオブジェクトは新しいオブジェクトとして扱われるため、共有に必要な権限がオブジェクトに明示的に付与されるまではアクセスできません。

  • 共有データベースロールは、オブジェクトに対する将来の付与をサポートしません。詳細については、 GRANT DATABASE ROLE ... TO SHARE をご参照ください。

共有用 DDL

共有の作成と管理をサポートするために、Snowflakeは次の一連の特別な DDL コマンドを提供します。

タスクの作成と管理をサポートするために、Snowflakeは次の一連の特別な DDL コマンドを提供します。

さらに、プロバイダーは、次の標準アクセス制御 DDL を使用して、共有内にあるデータベースオブジェクトの表示、アクセス権の付与または取り消しができます。

共有を作成する準備

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

  • データベース

  • テーブル

  • 外部テーブル

  • セキュアビュー

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

  • 安全な UDFs

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

データベースとテーブル

データベースを共有するための準備はほとんど必要ありません。同様に、データベース内のテーブル全体を共有することを選択した場合の準備は不要です。

ただし、特定の条件に基づいて、またはコンシューマーアカウントによって、テーブル(またはテーブルのセット)のデータをフィルター処理する場合、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)の変更を記録するストリームを独自のデータベースに作成できます。

注釈

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

データコンシューマーによる、共有テーブルへのテーブルストリームの作成を有効化

データコンシューマーが共有テーブルまたはセキュアビューにストリームを作成するには、共有テーブルまたは共有ビューの基になるテーブルで変更追跡を有効にする必要があります。

さらに、テーブルのデータ保持期間を延長する必要があります。

変更の追跡を有効にする

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

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

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

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

CHANGE_TRACKING および DATA_RETENTION_TIME_IN_DAYS パラメータは、テーブルを作成するときに( CREATE TABLE を使用して)または後で( ALTER TABLE を使用して)設定できます。

共有タグの参照

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

コンシューマーは、 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 グローバル権限を付与されたロールを使用する必要があります。

Snowsightの使用

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

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

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

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

直接共有を作成して、他のアカウントとデータを共有するには、

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

  2. Data » 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 を選択します。

従来のコンソールの使用

Classic Console の Shares Shares tab ページで、 Outbound タブを選択します。

SQLの使用

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

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

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

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

注釈

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

ステップ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は、ユーザーアカウントからのデータアクセスを自分のアカウント内から発生したかのように扱います。

これらの推奨事項と制限の詳細については、 データ共有とBusiness Criticalアカウント をご参照ください。

次の例では、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 グローバル権限を持つロールを使用する必要があります。

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

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

注釈

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

重要

異なる 地域 または クラウドプラットフォーム のデータコンシューマーとデータを安全に共有することを計画するときは、現在、1つ以上の外部テーブルがデータベースに存在する場合、プライマリデータベースの複製がブロックされることに注意してください。

Snowsightの使用

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

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

  2. Data » Private Sharing を選択します。

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

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

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

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

  7. Done を選択します。

従来のコンソールの使用

Classic Console の Shares Shares tab ページで、 Outbound タブを選択します。

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 を使用して実行する必要があります。

Snowsightの使用

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

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

  2. Data » Private Sharing を選択します。

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

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

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

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

  7. Done を選択します。

従来のコンソールの使用

Classic Console の Shares Shares tab ページで、 Outbound タブを選択します。

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オブジェクトのクエリを開始できます。

Snowsightの使用

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

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

  2. Data » Private Sharing を選択します。

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

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

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

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

  7. Add を選択します。

従来のコンソールの使用

Classic Console の Shares Shares tab ページで、 Outbound タブを選択します。

アカウントを追加するときに、フルアカウントまたはリーダーアカウントの追加を選択できます。また、その場でリーダーアカウントを作成し、共有に追加することもできます。

SQLの使用

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

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

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

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

注釈

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

Snowsightの使用

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

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

  2. Data » Private Sharing を選択します。

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

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

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

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

従来のコンソールの使用

Classic Console の Shares Shares tab ページで、 Outbound タブを選択します。

SQLの使用

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

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

SQL を使用した共有のドロップ

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

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

注釈

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

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

Snowsightの使用

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

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

  2. Data » Private Sharing を選択します。

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

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

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

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

従来のコンソールの使用

Classic Console の Shares Shares tab ページで、 Outbound タブを選択します。

SQLの使用

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

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

共有からデータベースを作成したアカウントを表示するには、 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 » Private Sharing を選択します。

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

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

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

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

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

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

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

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

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