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

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

セッションポリシー権限

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

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

権限

使用状況

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 コマンドの構文、およびセッションポリシー、データベース、およびスキーマを操作するための権限を確認します。