Snowflake Native App へのアクセス権の付与

このトピックでは、コンシューマーが Snowflake Native App にアカウントでのオブジェクトの作成とアクセスを許可する方法について説明します。これには、アプリがリクエストする権限を付与したり、参照を使用して既存のオブジェクトへのアクセスを可能にしたりすることが含まれます。

アプリケーションによりリクエストされる権限と参照について

単純な Snowflake Native App では、インストール中にセットアップスクリプトが実行されると、アプリが必要とするオブジェクトはすべて APPLICATION オブジェクト内で作成されます。アプリケーションに必要なオブジェクトはすべて、インストールされたアプリケーション内で作成され、アクセスされます。コンシューマーは自分のアカウントで何もする必要はありません。

ただし、アプリによっては、コンシューマーが自分のアカウントで以下のようなアクションの実行を求める場合があります。

  • データベースまたはウェアハウスを作成する。

  • タスクを実行する。

  • 既存のオブジェクト(テーブルなど)にアクセスする。

Snowflake Native App がリクエストできるアクセス権には2種類あります。

  • アプリがいくつかのアカウントレベルの操作を実行できるようにする権限。アプリは、以下のグローバル権限をリクエストできます。

    • EXECUTE TASK

    • EXECUTE MANAGED TASK

    • CREATE WAREHOUSE

    • MANAGE WAREHOUSES

    • CREATE DATABASE

    アプリによっては、IMPORTED PRIVILEGES 権限を SNOWFLAKE データベースに対してリクエストすることもあります。詳細については、 SNOWFLAKE データベースで IMPORTED PRIVILEGES 権限を付与する をご参照ください。

  • コンシューマーカウントにすでに存在し、APPLICATION オブジェクトの外部にあるオブジェクトへのアクセスをアプリに許可する参照。プロバイダーは、 manifest.yml ファイルでアプリに必要な参照を定義します。

    アプリをインストールした後、コンシューマーはオブジェクトをアプリに関連付ける 参照 を作成することで、オブジェクトへのアクセスを許可できます。

    アプリは、以下の型のオブジェクトとそれに対応する権限へのアクセスをリクエストできます。

    オブジェクト型

    許可される権限

    TABLE

    SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES

    VIEW

    SELECT, REFERENCES

    EXTERNAL TABLE

    SELECT, REFERENCES

    FUNCTION

    USAGE

    PROCEDURE

    USAGE

    WAREHOUSE

    MODIFY, MONITOR, USAGE, OPERATE

    API INTEGRATION

    USAGE

コンシューマーは、 Snowsight を使用するか、次のセクションで説明する SQL コマンドを実行することで、これらのリクエストを承認できます。

注釈

リクエストされた権限を付与しなかったり、リクエストされたオブジェクトの参照をアプリに関連付けなかったりすると、アプリの一部が正しく機能しなくなる可能性があります。

Snowsightを使用してアクセスリクエストを管理する

プロバイダーが Snowflake Native App でユーザーインターフェイスを実装している場合、コンシューマーは Snowsight を使用して以下を実行できます。

  • グローバル権限を表示して付与します。

  • コンシューマーアカウントで既存のオブジェクトへのアクセスを許可します。

グローバル権限を付与する

アプリケーションのインストール後に権限を付与したり参照を作成したりするには、次を実行します。

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

  2. 左側のナビゲーションバーで、 Apps を選択します

  3. アプリケーションを選択します。

  4. ツールバーの Security アイコンを選択します。

    アプリケーションによってリクエストされたアカウントレベルの権限は、 Account level privileges に表示されます。

  5. Account-level privileges セクションで Review を選択し、付与する権限ごとにスライダーを切り替えます。

  6. Save を選択します。

特定オブジェクトへのアクセスを許可する

プロバイダーが Snowflake Native App 用のユーザーインターフェイスを実装している場合、コンシューマーは Snowsight を使用して、アカウント内のオブジェクトへのアクセスを許可することができます。

特定のオブジェクトへのアクセスを許可するには

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

  2. 左側のナビゲーションバーで、 Apps を選択します

  3. アプリケーションを選択します。

  4. ツールバーの Security アイコンを選択します。

  5. Privileges to objects セクションで、アクセスを許可するオブジェクトの横にある Add を選択します。

  6. Select Data を選択し、アクセスを許可するデータ製品を選択します。

  7. Done を選択します。

オブジェクトへの権限およびアクセスを取り消す

オブジェクトへの権限やアクセスを取り消すには、次を実行します。

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

  2. 左側のナビゲーションバーで、 Apps を選択します

  3. アプリケーションを選択します。

  4. ツールバーの Security アイコンを選択します。

    • グローバル権限を取り消すには、 Edit ボタンを選択し、取り消す権限のスライダーを切り替えます。

    • 特定のオブジェクトからのアクセスを取り消すには、 Delete ボタンを選択し、 Revoke Privilege を選択します。

注釈

権限を取り消したり、オブジェクトからのアクセスを削除したりすると、アプリケーションが不安定になったり、動作しなくなったりすることがあります。

SQL コマンドを使用してアプリの権限を管理する

アプリケーション開発者が権限付与のためのインターフェイスを実装していない場合は、 SQL コマンドを使用して、アプリケーションのアクセスリクエストを管理する必要があります。

アプリケーションによりリクエストされた権限を表示する

プロバイダーがアプリケーションに必要な権限を指定すると、インストールされたアプリケーションの一部として権限リクエストが含まれます。これらの権限は、アプリケーションのインストール後に表示できます。

アプリケーションに必要な権限を表示するには、次の例に示すように SHOWPRIVILEGES コマンドを実行します。

SHOW PRIVILEGES IN APPLICATION hello_snowflake_app;
Copy

Snowflake Native App に権限を付与する

コンシューマーは、アプリがリクエストする権限を決定した後、その権限をアプリに付与することができる。

たとえば、アプリに EXECUTE TASK 権限を付与するには、次の例に示すように GRANTPRIVILEGE コマンドを実行します。

GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION hello_snowflake_app;
Copy

Snowflake Native App に MANAGEWAREHOUSES 権限を付与する

MANAGE WAREHOUSES 権限 により、アプリケーションはコンシューマーカウント内でウェアハウスを作成、変更、使用することができます。アプリに MANAGE WAREHOUSES 権限を付与するには、次の例に示すように GRANT を使用します。

GRANT MANAGE WAREHOUSES ON ACCOUNT TO APPLICATION hello_snowflake_app;
Copy

SNOWFLAKE データベースで IMPORTED PRIVILEGES 権限を付与する

アプリケーションによっては、コンシューマーが自分のアカウントの SNOWFLAKE データベースに IMPORTEDPRIVILEGES 権限の付与をリクエストする場合があります。この権限は、 SQL コマンドを使用してのみ付与することができます。 Snowsight を使用して付与することはできません。アプリケーションがこの権限を必要とする場合、プロバイダーはアプリケーションの README ファイルなどでこの要件をコンシューマーに伝える必要があります。

SNOWFLAKE データベースに対する IMPORT 権限を付与するには、以下のコマンドを実行します。

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO APPLICATION hello_snowflake_app;
Copy

注釈

IMPORTEDPRIVILEGES 権限により、アプリはコンシューマーアカウントに関連する使用状況とコストに関する情報にアクセスできます。コンシューマーは、この権限を付与する前に、アプリとこの情報を共有することを確認する必要があります。

オブジェクトへのアクセスを手動で許可する

プロバイダーが manifest.yml ファイルでオブジェクトへの参照を定義すると、この参照定義がインストールされたアプリの一部として含まれます。コンシューマーは、自分のアカウントでオブジェクトへの参照を作成し、アプリがオブジェクトにアクセスすることを許可することができます。プロバイダーがコンシューマーアカウントのオブジェクトへのアクセスを許可するためのユーザーインターフェイスを作成していない場合、コンシューマーは手動でアクセスを許可することができます。

コンシューマーは、オブジェクトに対してリクエストされた権限を持っている場合、アプリと関連付けるオブジェクトの参照を作成できます。たとえば、テーブルなどのオブジェクトに対して SELECT と INSERT の権限が必要な場合、コンシューマーはテーブルに対して SELECT と INSERT の権限を持つロールを使用して参照を作成しなければなりません。オブジェクトの型と各オブジェクトに必要な特定の権限付与を表示するには、 アプリがリクエストした参照を表示する をご参照ください。

注釈

参照はオブジェクトに権限を付与するものではありません。参照を作成するために使用されたロールがオブジェクトに対する権限を失うと、その参照は無効になります。コンシューマーは、次のいずれかを実行する必要があります。

  • 参照を作成したロールに必要な権限を復元する。

  • オブジェクトで必要な権限を持つロールを使用して、参照を再作成する。

アプリがリクエストした参照を表示する

コンシューマーは、次の例に示すように SHOW REFERENCES コマンドを実行することで、アプリがリクエストした参照を表示できます。

SHOW REFERENCES IN APPLICATION hello_snowflake_app;
Copy

このコマンドは、アプリで定義されているすべての参照のリストを表示します。また、参照を作成するために、コンシューマーロールがオブジェクトに対して持っていなければならない権限も表示されます。

参照を作成し、アプリへ参照を関連付ける

アプリケーションがリクエストした 参照を表示 した後、コンシューマーは次の例に示すように SYSTEM$REFERENCE システム関数を実行することによって、参照を作成することができます。

SELECT SYSTEM$REFERENCE('table', 'db1.schema1.table1', 'persistent', 'select', 'insert');
Copy

このコマンドは参照を作成し、オブジェクトの識別子を返します。識別子は次の例のようになります。

ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D

コンシューマーはこの識別子をコールバックのストアドプロシージャに渡し、参照をアプリに関連付けます。

注釈

コンシューマーは、アプリがリクエストした参照ごとにこのコマンドを実行する必要があります。

アプリケーションへの参照を関連付けるには、コンシューマーは SYSTEM$REFERENCE システム関数を呼び出して返された識別子をコールバックストアドプロシージャに渡す必要があります。コールバックプロシージャは、プロバイダーが参照をアプリに関連付けるために Snowflake Native App に作成するストアドプロシージャです。

コールバックプロシージャを使用するには、以下のコマンドを実行します。

CALL app.config.register_single_reference(
  'consumer_table', 'ADD', 'ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D');
Copy

この例では、 register_single_reference() ストアドプロシージャは、識別子 ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D を持つ参照をアプリに関連付けます。

注釈

プロバイダーは、アプリにさまざまなコールバックプロシージャを含めることができます。これらはアプリケーションの README ファイルで指定する必要があります。

単一ステップで参照を作成し、アプリに関連付ける

アプリケーションがリクエストした 参照を表示 した後、コンシューマーは SYSTEM$REFERENCE システム関数をコールバックストアドプロシージャの引数として渡すことで、参照を作成し、アプリに関連付けることができます。

次の例は、 SYSTEM $ REFERENCE システム関数をコールバックストアドプロシージャの引数として渡す構文を示しています。

CALL app.config.register_single_reference(
 'consumer_table', 'ADD', SYSTEM$REFERENCE('table', 'db1.schema1.table1',
 'PERSISTENT', 'SELECT', 'INSERT'));
Copy

この例では、参照を作成し、その識別子をコールバック関数に渡して、参照をアプリに関連付けます。