アプリ内の実行ファイルへの制限付き呼び出し元権利の実行

このトピックでは、コンシューマーが |native-app|の実行可能ファイルファイルに呼び出し元許可を付与する方法について説明します。

アプリにおける所有者の権利と通話制限について

アプリのコンテキストでは、次のタイプの実行可能ファイルがサポートされています。

  • アプリが所有するストアドプロシージャ

  • コンテナー搭載アプリで利用可能なサービス

これらのタイプの実行ファイルはそれぞれ、所有者の権利または制限された呼び出し元の権利のいずれかを使用するように構成できます。

所有者の権限:

デフォルトでは、アプリ内の実行可能ファイルは所有者の権限を使用します。つまり、実行可能ファイルの所有者(アプリ自体)に付与された権限で実行されます。

例えば、所有者の権利は、実行可能ファイルがプロバイダーアカウントのデータにアクセスし、そのデータをコンシューマーに提示することを許可します。ただし、コンシューマーがデータに直接アクセスすることはできません。

たとえば、 CREATE PROCEDURE コマンドは、デフォルトで所有者の権限を使用するストアドプロシージャを作成します 。コンシューマーは、アプリケーションロールを使用してアクセス権を付与されている場合、ストアドプロシージャを呼び出すことができます。アプリが操作を実行する権限を持っている場合、ストアドプロシージャはその操作を実行できます。

所有者の権限に関する一般情報については、呼び出し元権限と所有者権限のストアドプロシージャについて をご参照ください。

制限された呼び出し元権限:

制限された呼び出し元権限は、実行可能ファイルを呼び出し元権限で実行することを許可しますが、実行可能ファイルがどの呼び出し元権限で実行されるかを制限します。制限された呼び出し元権限では、コンシューマーアカウントの管理者が GRANT CALLER コマンドを使用して明示的に許可しない限り、アプリが所有する実行可能ファイルを特定の権限で実行することはできません。

注釈

アプリの実行可能ファイルが安全であることを保証するため、Snowflake Native Apps は無制限の呼び出し元権限をサポートしていません。

制限された呼び出し元権限に関する一般的な情報については、 制限された呼び出し元権限 をご参照ください。

アプリにおける制限された呼び出し元権限の範囲

Snowflakeでは、コンシューマーがコンシューマーアカウントの特定のオブジェクトではなく、コンテナレベルで呼び出し元グラントを付与することを推奨しています。

スキーマレベル:

スキーマへの呼び出し元の権限を付与しますが、スキーマ内のオブジェクトへの権限は付与しません。たとえば、スキーマで CALLER USAGE 呼び出し元グラントを付与すると、スキーマで USAGE 権限のみを付与します。関数などの特定のオブジェクトへのアクセスを付与するには、GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN SCHEMA を使用します。

データベースレベル:

データベースレベルで呼び出し元グラントを付与すると、実行可能ファイルはデータベースとデータベース内のすべてのスキーマにのみアクセスできるようになります。たとえば、CALLER USAGE 呼び出し元グラントを付与すると、データベースで USAGE 権限を付与します。ただし、特定のオブジェクトへのアクセスを付与するには、次のコマンドを使用する必要があります。

GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN DATABASE;
Copy
アカウントレベル:

アカウントレベルで呼び出し元グラントを付与すると、実行可能ファイルはアカウントレベルの操作を実行できるようになります。CALLER USAGE 呼び出し元グラントを付与すると、実行可能ファイルはアカウントにアクセスできるようになりますが、アカウント内のオブジェクトへのアクセスは付与されません。

特定のオブジェクトへのアクセスを許可するには、そのアカウントで特定の型のオブジェクトへのアクセスを付与します。たとえば、CREATE DATABASE 呼び出し元グラントを付与すると、次の例に示すように、実行可能ファイルがコンシューマーアカウントでデータベースを作成できるようになります。

GRANT CALLER CREATE DATABASE ON ACCOUNT TO my_app;
Copy

アプリに付与できるアカウントレベルの呼び出し元グラント

プロバイダーは、以下のアカウントレベルの呼び出し元グラントを使用するように、アプリ内の実行可能ファイルを構成できます。

  • CREATE DATABASE

  • EXECUTE ALERT

  • EXECUTE MANAGED TASK

  • EXECUTE TASK

  • READ SESSION

  • VIEW に LINEAGE

注釈

アプリにアカウントレベルの呼び出し元グラントを付与する場合、コンシューマーは注意を払う必要があります。

アプリに制限付き発信者権限を付与するために必要な権限

コンシューマーとしてアプリに発信者権限を付与するには、 ACCOUNTADMIN ロールを使用するか、 MANAGE CALLER GRANTS 権限を持つロールを使用する必要があります。詳細については、 GRANT CALLER をご参照ください。

Snowsight を使用して、アプリ内の実行ファイルに呼び出し元グラントを付与します。

Snowsight を使用すると、コンシューマーアカウントのオブジェクトに対して、アプリに呼び出し元グラントを付与することができます。

注釈

アプリからの呼び出し元グラントの取り消し、特定のテーブルへの呼び出し元グラントの付与、アカウントレベルの呼び出し元権限の付与など、その他のタスクを実行するには、適切な SQL コマンドを使用する必要があります。

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

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

  3. アプリを選択してください。

  4. ツールバーの Settings アイコンをクリックし、 Privileges タブを選択します。

    アプリが発信者権限の制限に対応している場合、 Privileges タブに Restricted caller's rights セクションが表示されます。

    注釈

    プロバイダーが、制限された発信者の権限を表示するようにアプリを構成している場合にのみ、 Snowsight から発信者権限 UI を付与できます。

  5. Add grants をクリックします。

  6. Access scope を選択してください。

    これは、呼び出し元の権限がスキーマに適用されるのか、データベースに適用されるのか、アカウントレベルに適用されるのかを決定します。アプリに不要な権限を付与しないように、可能な限り範囲の狭いオプションを選択する必要があります。

    注意

    アカウントレベルのスコープを選択すると、サポートされているすべてのオブジェクトタイプでアプリの呼び出し元権限が付与される可能性があるため、注意が必要です。

  7. スキーマまたはデータベースのスコープを選択した場合は、必要に応じてスキーマまたはデータベースを選択します。

注釈

複数のスキーマまたはデータベースを選択できます。異なるデータベースのスキーマを選択することもできます。

  1. Next をクリックします。

  2. 発信者権限を付与するオブジェクトのタイプを選択します。

    検索を使用してオブジェクトタイプを検索します。オブジェクトタイプのリストは、上記で選択したスコープによって異なります。

    オブジェクトタイプを選択すると、リスト内のオブジェクトの項目が展開され、各オブジェクトタイプで利用可能な権限が表示されます。

  3. 付与したい権限を選択します。

    オブジェクトタイプごとに複数の権限を選択することができます。他のオブジェクトタイプの権限を選択することもできます。

    注釈

    Snowflakeは、選択したオブジェクトに自動的に USAGE 権限を付与します。

  4. Next をクリックします。

  5. Grant summary を選択して、選択したスコープ、オブジェクトタイプ、権限を確認します。

    注釈

    今後作成される選択したタイプのオブジェクトは、選択したスコープとオブジェクトタイプを使用して、同じ権限で作成されます。

  6. Snowsight が実行する GRANT CALLER コマンドを表示するには、 SQL を選択します。

    注釈

    必要であれば、これらのコマンドをコピーし、ワークシートで手動で実行することができます。

  7. Save をクリックします

選択したスコープ、オブジェクト、権限が Restricted caller's rights section に表示されます。

選択した権限を変更するには、 Edit をクリックし、必要に応じて権限を選択または選択解除します。

SQL を使用して、アプリ内の実行ファイルに呼び出し元グラントを付与します。

制限された発信者権限をリクエストするアプリを構成する場合は、以下のタスクを実行して、アプリに発信者権限を付与します。

  1. アプリのリストをチェックして、プロバイダーがアプリに RCR 実行可能ファイルがあることを伝えているかどうかを確認します。

  2. リストに記載されているように、発信者付与を付与します。次の例は、 GRANT CALLER コマンドを使用して、特定のデータベースとスキーマのすべてのテーブルに SELECT 権限を付与する方法を示しています。

    GRANT CALLER USAGE ON DATABASE db1
      TO APPLICATION hello_snowflake_app;
    GRANT CALLER USAGE ON SCHEMA db1.sch1
      TO APPLICATION hello_snowflake_app;
    GRANT INHERITED CALLER SELECT ON ALL TABLES IN SCHEMA db.sch1
      TO APPLICATION hello_snowflake_app;
    
    Copy

    このコマンドは、制限された呼び出し元権限を持つ実行ファイルに、 db.sch1 データベースとスキーマを持つすべてのテーブルに対する実行クエリへのアクセスを許可します。すべてのテーブルに SELECT 権限を付与することに加えて、データベースとスキーマに USAGE を付与する必要があります。