動的テーブルのアクセス制御

このトピックでは、動的テーブルの作成、クエリ、変更、表示、削除などの操作を実行するために必要な権限について説明します。

Snowflake権限モデルの詳細については、 アクセス制御の概要 および アクセス制御権限 をご参照ください。

所有権の譲渡

動的テーブルへのフルアクセスをユーザーに提供するには、次のいずれかを実行します。

動的テーブルには通常のテーブルとは異なる権限セットがあるため、付与を割り当てる際には、オブジェクトタイプを DYNAMIC TABLE に指定します。

動的テーブルに OWNERSHIP 権限を付与するには、受け取りロールが以下の USAGE 権限を持っていることを確認してください。そうしないと、その後のリフレッシュに失敗します。

  • 動的テーブルを含むデータベースとスキーマ。

  • テーブルのリフレッシュに使用されるウェアハウス。

動的テーブルの所有権を移譲するには、 GRANT OWNERSHIP コマンドまたは Snowsight を使用します。

以下の例では、 GRANT OWNERSHIP コマンドを使用して、 budget_admin ロールに my_dynamic_table の所有権権限を付与しています。

GRANT OWNERSHIP ON DYNAMIC TABLE my_dynamic_table TO ROLE budget_admin;

以下の例では、 GRANT OWNERSHIP コマンドを使用して、 mydb.myschema スキーマで作成された将来のすべての動的テーブルの所有権限を budget_admin ロールに付与しています。

GRANT OWNERSHIP ON FUTURE DYNAMIC TABLES IN SCHEMA mydb.myschema TO ROLE budget_admin;

Snowflake権限モデルの詳細については、 アクセス制御の概要 および アクセス制御権限 をご参照ください。

特定のユーザー権限とセカンダリロールによる動的テーブルのリフレッシュ

動的テーブルは、所有者ロールの権限に加えて、特定のユーザーの権限でリフレッシュするように構成できます。EXECUTEASUSERを指定した動的テーブルは、システムユーザーの代わりに、指定されたユーザーの代理として実行されます。

たとえば、ユーザーに、テーブルへのアクセスを提供するプライマリロールと、仮想ウェアハウスへのアクセスを提供するセカンダリロールを付与できます。ユーザーはその後、両方のロールの権限を組み合わせた動的テーブルを作成できるため、権限管理が簡素化され、データ操作の柔軟性が向上します。

EXECUTEASUSERオプションにより、ユーザーのロールで動的テーブルをリフレッシュできますが、これらの動的テーブルに対する他のすべての操作は標準の権限モデルに従います。

主なユースケース

  • **複数ロールの権限の管理:**ユーザーがセカンダリロールを持つ場合、ユーザーはプライマリロールとセカンダリロールの権限を組み合わせて動的テーブルを作成し、リフレッシュできます。この構成により、既存のロールベースのアクセス制御との一貫性を維持しながら、動的テーブルをリフレッシュするユーザーが必要なすべてのリソースにアクセスするための権限を確実に持てるようになります。

  • **詳細なセキュリティとガバナンスの制御:**ユーザーは、REQUIREUSERなどの追加オプションでオプションのセキュリティ対策を構成できます。この場合、ユーザーが指定されない限り、動的テーブルは実行されません。

  • **すべての操作に対する責任:**EXECUTEASUSER動的テーブルのすべてのリフレッシュは、SYSTEMユーザーではなく、構成されたユーザーに帰属します。この帰属情報により、すべての操作の明確な監査証跡を保つことができます。

アクセス制御

動的テーブルの所有者ロールには、EXECUTEASUSERにより指定されたユーザーに対するIMPERSONATE権限が付与されている必要があり、指定されたユーザーには動的テーブルの所有者ロールが付与されている必要があります。IMPERSONATE権限が取り消されると、動的テーブルのリフレッシュは失敗し、動的テーブルは:ref:`自動一時停止<label-dynamic_tables_manage_understanidng_auto_suspend>`される可能性があります。

動的テーブルがリフレッシュされると、リフレッシュセッションのプライマリロールは動的テーブルの所有者ロールになり、ユーザーのデフォルトのセカンダリロールがアクティブ化されます。ユーザーは、USEROLEコマンドを使用してプライマリロールを切り替え、USESECONDARYROLESコマンドを使用してタスクセッション内のセカンダリロールを調整できます。

製品間の考慮事項

  • **データマスキングおよび行アクセスポリシー:**ポリシー(例:CURRENT_USER()を使用するもの)は、SYSTEMユーザーではなく指定されたユーザーとロールに基づいて評価されます。

  • **複製およびフェールオーバー:**ユーザー名とロール名は、セカンダリデプロイメントに複製されます。

    ユーザーまたはロールがセカンダリデプロイメントで利用できない場合、そのユーザーはINVALIDとしてマークされ、修正されるまでリフレッシュは失敗します。

    残りのロールが十分な権限を提供する場合、無効なセカンダリロールは実行中にスキップされます。

ユーザーとしてリフレッシュを実行するための動的テーブルの構成

次の例では、プライマリロールを動的テーブルの所有者ロールに設定し、指定されたユーザーとしてリフレッシュを実行する動的テーブルを作成します。リフレッシュは、ユーザーが設定したユーザー系統パラメーターで実行されます。

セカンダリロールのオプションが明示的に指定されていない場合、リフレッシュはデフォルトでユーザーの現在のセッション設定になります。

CREATE DYNAMIC TABLE my_dynamic_table
  [ EXECUTE AS USER my_user_name
    [ USE SECONDARY ROLES { ALL | NONE | (<role1>, <role2>, ... ) } ]
  ]

既存の動的テーブルにセカンダリロールを設定する

次の例では、指定されたユーザーとして実行する動的テーブルを構成します。 特定のセカンダリロールが選択されていない場合、リフレッシュプロセスはデフォルトで現在のセッションでアクティブなセカンダリロールを使用します。動的テーブルが特定のユーザーとして実行するようにすでに設定されている場合、このコマンドは、ALTERDYNAMICTABLEコマンドを実行するユーザーとして実行するように構成を更新します。

このコマンドを実行するには、動的テーブルに対するOWNERSHIP権限が必要です。

ALTER DYNAMIC TABLE my_dynamic_table SET
  EXECUTE AS USER my_user_name
  [ USE SECONDARY ROLES { ALL | NONE | (<role1>, <role2>, ... ) } ]

動的テーブルを切り替えてSYSTEMユーザーとして実行する

次の例では、動的テーブルを元に戻し、動的テーブルの所有者ロールを使用してSYSTEMユーザーの下で実行します。

このコマンドを実行するには、動的テーブルに対するOWNERSHIP権限が必要です。

ALTER DYNAMIC TABLE my_dynamic_table UNSET EXECUTE AS USER;

動的テーブルを作成する権限

動的テーブルを作成するには、次の権限を持つロールを使用する必要があります。

権限

オブジェクト

CREATE DYNAMIC TABLE

動的テーブルの作成を予定のスキーマ。

SELECT

新しい動的テーブルに対してクエリを実行する予定の既存のテーブルとビュー。

USAGE

新しい動的テーブルに使用する予定のデータベースとスキーマ。

テーブルのリフレッシュに使用する予定のウェアハウス。

注釈

USAGE 権限を持つセカンダリロールで CREATE DYNAMIC TABLE ... INITIALIZE = ON_SCHEDULE を実行することはできますが、プライマリロールにこの権限がない場合、動的テーブルは正常に更新されず、したがって初期化されません。

別の動的テーブルに依存する動的テーブルを作成するには、次の権限を持つロールを使用する必要があります。

権限

オブジェクト

SELECT

新しい動的テーブルを作成するためにクエリを実行する予定の動的テーブル。

OPERATE

All upstream dynamic tables the new dynamic table depends on. Only required if you set the dynamic table to refresh synchronously at creation and the upstream dynamic table is referenced directly in the definition, not through DYNAMIC_TABLE_REFRESH_BOUNDARY().

動的テーブルをクエリする権限

動的テーブルにクエリするには、 権限を持つロールを使用して、動的テーブル を作成します。ユーザーが動的テーブルのみをクエリする必要があるシナリオ(データアナリストなど)では、次の権限を持つロールを使用します。

権限

オブジェクト

USAGE

動的テーブルを含むデータベースとスキーマ。

クエリの実行に使用されるウェアハウス。

SELECT

クエリされる動的テーブル。

動的テーブルを変更する権限

動的テーブルを変更するには、その動的テーブルの OWNERSHIP または OPERATE 権限を持つロールを使用する必要があります。

動的テーブルで OPERATE 権限を持っている場合、 ALTER DYNAMIC TABLE コマンドで次を実行できます。

  • ALTER ... SUSPEND を使用して動的テーブルを中断します。

  • ALTER ... RESUME を使用して動的テーブルを再開します。

  • ALTER ... REFRESH を使用して動的テーブルをリフレッシュします。

  • ALTER ... SET を使用してウェアハウスおよび/またはターゲットラグを設定または変更します。

動的テーブルの OWNERSHIP 権限を持っている場合、上記の操作に加えて以下のことができます。

動的テーブルのメタデータを表示する権限

メタデータを表示するには、その動的テーブルの MONITOR 権限を持つロールを使用する必要があります。

ユーザーが動的テーブルのメタデータとInformation Schemaを表示する必要があるだけのシナリオ(例えば、データサイエンティストが持つロール)では、その動的テーブルの MONITOR 権限を持つロールを使用してください。OPERATE 権限ではこのアクセス権が付与されますが、動的テーブルを変更する機能も含まれているため、ユーザーが動的テーブルを変更する必要のないシナリオでは MONITOR 権限の方が適しています。

動的テーブルで MONITOR 権限を持っている場合、次を実行できます。

  • DESCRIBE DYNAMIC TABLE コマンドと Snowsight 動的テーブルの詳細ページを使用して、動的テーブルの特定の詳細を表示します。動的テーブルで SELECT 権限のみを持つ場合、次のフィールドは非表示になります: textwarehousescheduling_statelast_suspended_onsuspend_reason_code (UI のみ)。

  • どの動的テーブルにアクセスできるかを表示するには、 SHOW DYNAMIC TABLES コマンドを使用します。

  • グラフの履歴を表示するには、 DYNAMIC_TABLE_GRAPH_HISTORY テーブル関数を呼び出します。

  • リフレッシュ履歴を表示するには、 DYNAMIC_TABLE_REFRESH_HISTORY テーブル関数を呼び出します。

動的テーブルをドロップする権限

動的テーブルをドロップするには、その動的テーブルに対して OWNERSHIP 権限を持つロールを使用する必要があります。

デュアルウェアハウスを使用する権限

INITIALIZATION_WAREHOUSE を使用するための権限要件はすべて WAREHOUSE と同じです。

操作

権限

INITIALIZATION_WAREHOUSE を使用する CREATE DYNAMIC TABLE

両方のウェアハウス( WAREHOUSE および INITIALIZATION_WAREHOUSE )での CREATE DYNAMIC TABLE および USAGE 。

ALTER DYNAMIC TABLE ... SET / UNSET INITIALIZATION_WAREHOUSE

動的テーブルでの OWNERSHIP または OPERATE および該当するウェアハウスでの USAGE 。

INITIALIZATION_WAREHOUSE を使用する動的テーブルでの ALTER DYNAMIC TABLE ... REFRESH

動的テーブルでの OPERATE および該当するウェアハウスでの USAGE 。

詳細については、 動的テーブルのウェアハウスの使用を理解する をご参照ください。