セッションポリシーの管理

このトピックでは、Snowflakeセッションとセッションポリシーについて説明し、アカウントまたはユーザーレベルでセッションポリシーを構成する手順について説明します。

セッションポリシー権限

Snowflakeは、ユーザーがセッションポリシーを作成、設定、および所有できるかどうかを決定するために、次の権限をサポートしています。

Operating on an object in a schema requires at least one privilege on the parent database and at least one privilege on the parent schema.

権限

使用状況

CREATE SESSION POLICY

スキーマで、新しいセッションポリシーを作成できるようにします。

APPLY SESSION POLICY

アカウントまたはユーザーレベルで任意のセッションポリシーを適用できるようにします。

OWNERSHIP

セッションポリシーに対する包括的な制御を付与します。セッションポリシーのほとんどのプロパティを変更するために必要です。

コマンド、操作、および権限の概要

次のテーブルは、セッションポリシー DDL 操作と必要な権限の関係をまとめたものです。

操作

必要な権限

セッションポリシーを作成する

スキーマに対する CREATE SESSION POLICY 権限を持つロール。

セッションポリシーを変更する

セッションポリシーに対する OWNERSHIP 権限を持つロール。

セッションポリシーをドロップする

セッションポリシーに対する OWNERSHIP 権限を持つロール。

セッションポリシーを記述する

セッションポリシーの OWNERSHIP 権限 または . アカウントの APPLY SESSION POLICY 権限を持つロール。

セッションポリシーを表示する

セッションポリシーの OWNERSHIP 権限 または . アカウントの APPLY SESSION POLICY 権限を持つロール。

セッションポリシーを設定および設定解除する

アカウントの場合、アカウントに対する APPLY SESSION POLICY 権限とセッションポリシーに対する OWNERSHIP 権限を持つロール、 または アカウントに対する APPLY SESSION POLICY 権限と特定のセッションポリシーに対する APPLY ON SESSION POLICY 権限を持つロール。

ユーザーの場合、USER <ユーザー名> 権限で APPLY SESSION POLICY のあるロール。

セッションポリシー DDL 参照

Snowflakeは、セッションポリシーオブジェクトを管理するために次の DDL コマンドを提供します。

アカウントのセッションポリシーを設定または設定解除するには、以下に示すように ALTER ACCOUNT コマンドを実行します。

ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_1;
Copy
ALTER ACCOUNT UNSET SESSION POLICY;
Copy

ユーザーレベルのセッションポリシーを設定または設定解除するには、以下に示すように ALTER USER コマンドを実行します。

ALTER USER jsmith SET SESSION POLICY mydb.policies.session_policy_prod_1_jsmith;
Copy
ALTER USER jsmith UNSET SESSION POLICY;
Copy

セッションポリシーの監査

  • SESSION_POLICIES ビュー ビューをクエリして、Snowflakeアカウントの各セッションポリシーとそのメタデータの行を返すことができます。

  • POLICY_REFERENCES 関数を呼び出すと、指定したセッションポリシーに割り当てられている各ユーザーの行と、Snowflakeアカウントに割り当てられているセッションポリシーの行を返すことができます。

    現在、セッションポリシーでは次の構文のみがサポートされています。

    POLICY_REFERENCES( POLICY_NAME => '<session_policy_name>' )
    
    Copy

    session_policy_name がセッションポリシーの完全修飾名の場合。

    たとえば、次のクエリを実行して、 my_db という名前のデータベースと my_schema という名前のスキーマに格納されている、 session_policy_prod_1 という名前のセッションポリシーが割り当てられている各ユーザーの行を返します。

    SELECT *
    FROM TABLE(
      my_db.INFORMATION_SCHEMA.POLICY_REFERENCES(
        POLICY_NAME => 'my_db.my_schema.session_policy_prod_1'
      ));
    
    Copy

セッションポリシーのトラブルシューティング

  • セッションポリシーがアカウントまたはユーザーに割り当てられ、セッションポリシーを含むデータベースまたはスキーマがドロップされた後、新しいセッションポリシーがアカウントまたはユーザーに割り当てられた場合、ユーザーは、新しいセッションポリシーのアイドルセッションタイムアウト値に保持されません。

    回避策は、 このトピック内 で示されているように、 ALTER ACCOUNT コマンドを使用してアカウントから、または ALTER USER コマンドを使用してユーザーから元のセッションポリシーの設定を解除することです。

  • 次のテーブルは、セッションポリシーで発生する可能性のあるいくつかのエラーメッセージをまとめたものです。

    動作

    エラーメッセージ

    トラブルシューティングアクション

    セッションポリシーを作成できません。

    CREATE SESSION POLICY を実行できません。このセッションには現在のデータベースがありません。「USE DATABASE」を呼び出すか、修飾名を使用します。

    CREATE SESSION POLICY を実行する前にデータベースを指定するか、 CREATE SESSION POLICY ステートメントで完全修飾オブジェクト名を使用します。

    セッションポリシーを作成できません。

    SQL アクセス制御エラー: スキーマ「<スキーマ名>」を操作するには権限が不十分です

    CREATE SESSION POLICY ステートメントを実行するロールに SCHEMA 権限の CREATE SESSION POLICY があることを確認します。

    セッションポリシーを作成できません。

    SQL コンパイルエラー: データベース「<データベース名>」が存在しないか、権限がありません。

    データベースが存在すること、および CREATE SESSION POLICY ステートメントを実行するロールが、セッションポリシーの存在する必要があるスキーマに対する USAGE 権限を持っていることを確認します。

    説明ステートメントを実行できません。

    SQL コンパイルエラー: スキーマ「<スキーマ名>」が存在しないか、許可されていません。

    DESC SESSION POLICY ステートメントを実行するロールが、セッションポリシーに対する OWNERSHIP 権限、 または セッションポリシーに対する APPLY 権限を持っていることを確認します。

    セッションポリシーをドロップできません。

    SQL コンパイルエラー: マスキングポリシー「<ポリシー名>」が存在しないか、権限がありません。

    DROP SESSION POLICY ステートメントを実行するロールが、セッションポリシーに対する OWNERSHIP 権限を持っていることを確認します。

    セッションポリシーをドロップできません。

    セッションポリシー <ポリシー名> はアカウントに関連付けられているため、ドロップできません。

    ALTER ACCOUNT ステートメントを使用してアカウントからセッションポリシーの設定を解除し、ドロップステートメントを再試行してください。

    アカウントにセッションポリシーを設定できません。

    セッションポリシー「<ポリシー名>」は、すでにアカウント <アカウント名> に添付されています。

    アカウントは、アクティブなセッションポリシーを1つだけ持つことができます。アカウントに設定するセッションポリシーを決定します。. 必要に応じて、 ALTER ACCOUNT コマンドを使用してアカウントから現在のセッションポリシーを設定解除します。次に、別の ALTER ACCOUNT コマンドを使用して、アカウントに他のセッションポリシーを設定します。

    タイムアウト値を設定できません。

    SQL コンパイルエラー: プロパティ「session_idle_timeout_mins」の値「<整数>」が無効です

    セッションタイムアウト値(分単位)は、 5 から 240 までの整数である必要があります。. セッションタイムアウトに有効な整数を選択し、 CREATE または ALTER SESSION POLICY ステートメントを再実行します。

    既存のセッションポリシーを更新できません。

    SQL コンパイルエラー: マスキングポリシー「<ポリシー名>」が存在しないか、権限がありません。

    セッションポリシーの名前、ALTER SESSION POLICY コマンドの構文、およびセッションポリシー、データベース、およびスキーマを操作するための権限を確認します。