Snowflakeセッションおよびセッションポリシー

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

このトピックの内容:

Snowflakeセッション

セッションは、ユーザーがSnowflakeに接続し、Snowflakeプログラムクライアント、 Snowsight、または classic web interface を使用して正常に認証されたときに開始されます。セッションは、IDプロバイダー(つまり IdP)セッションから独立しています。Snowflakeセッションの有効期限が切れても、 IdP セッションがアクティブなままの場合、ユーザーは認証情報を再度入力せずにSnowflakeにログインできます(つまり、サイレント認証)。

セッションは、ユーザーの継続的なアクティビティにより、無期限に維持されます。 アイドルセッションタイムアウト と呼ばれる、セッションで非アクティブな期間の後では、ユーザーはSnowflakeに対して再度認証する必要があります。アイドルセッションタイムアウトの最大値は4時間で、セッションポリシーによってアイドルセッションタイムアウト期間を変更できます。アイドルセッションタイムアウトは、以下に適用されます。

Snowflakeは、可能であれば既存のセッションを再利用し、セッションが不要になったときにSnowflakeへの接続を閉じることをお勧めします。

Snowflakeの従来のウェブインターフェイスセッション

Worksheets Worksheet tab タブでは、新しいワークシートが作成されるたびにSnowflakeが新しいセッションを作成します。各ワークシートは最大4時間のアイドル動作に制限されており、各ワークシートのアイドルタイムアウトは個別に追跡されます。

ワークシートが 閉じられる と、ワークシートのユーザーセッションは終了します。

開いた ワークシートが4時間の制限時間を経過すると、Snowflakeはユーザーをウェブインターフェイスからログアウトします。

注釈

クエリ結果セットのスクロールやデータセットの並べ替えなどの受動的な動作は、アイドルセッションタイムアウトトラッカーをリセットしないことに注意してください。

セッションの閉じられるのが早すぎたり、従来のウェブインターフェイスからログアウトされたりしないようにするには、必要な SQL ステートメントをローカルファイルに保存し、使用されていない開いているワークシートをすべて閉じます。

セッションポリシー

セッションポリシーは、 アイドル セッションタイムアウト期間を分単位で定義し、デフォルトのアイドルタイムアウト値である4時間を上書きするオプションを提供します。

セッションポリシーは、コンプライアンス要件に対応するために、構成可能なアイドルタイムアウト期間を持つアカウントまたはユーザーに設定できます。ユーザーがアカウントとユーザーレベルのセッションポリシーの両方に関連付けられている場合は、ユーザーレベルのセッションポリシーが優先されます。

セッションポリシーの動作を管理するプロパティは2つあります。

  • プログラムクライアントおよびSnowflakeクライアント用 SESSION_IDLE_TIMEOUT_MINS

  • 従来のウェブインターフェイス用 SESSION_UI_IDLE_TIMEOUT_MINS

タイムアウト期間は、Snowflakeへの認証が成功すると始まります。セッションポリシーが設定されていない場合、Snowflakeはデフォルト値の 240 分(つまり4時間)を使用します。セッションポリシーの設定可能な最小アイドルタイムアウト値は 5 分です。セッションが期限切れになった場合、ユーザーはSnowflakeに対して再度認証する必要があります。

注釈

セッションポリシーに関して、次の点に注意してください。

詳細については、次をご参照ください。

考慮事項

  • クライアントが CLIENT_SESSION_KEEP_ALIVE オプションをサポートし、オプションが TRUE に設定されている場合、クライアントは、Snowflakeへの接続がアクティブである限り、Snowflakeセッションを無期限に保持します。それ以外の場合、オプションが FALSE に設定されていると、セッションは4時間後に終了します。可能であれば、このオプションの使用は避けてください。使用すると、多くのオープンセッションが発生し、パフォーマンスを低下させる恐れのある、リソースへの要求が大きくなる可能性があります。

  • CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY パラメーター使用して、クライアントがセッションのトークンを更新しようとする間隔の秒数を指定できます。DDL および DML ステートメントの実行など、Snowflakeオブジェクトが引き続き使用されると、ウェブインターフェイスセッションを更新できます。Snowflakeは、30秒ごとにこの動作をチェックします。

  • 新しいワークシートを作成するか、既存のワークシートを開くと、確立されたユーザーセッションが引き続き使用されますが、アイドルセッションのタイムアウトは0にリセットされます。

制限事項

  • Snowsight は現在、セッションポリシーをサポートしていません。セッションポリシーが一般提供(GA)されるようになったときにサポートを予定しています。

  • 複製。 データベースの複製とフェールオーバー/フェールバック には、データベースオブジェクトのスナップショットにセッションポリシーとその関連付けは含まれていません。セッションポリシーが一般提供されるようになったときにサポートを予定しています。

セッションポリシーの実装

次のステップは、セッションポリシーを実装するための代表的なガイドです。

これらのステップは、 policy_admin という名前のカスタムロールがセッションポリシーを所有し(つまり、セッションポリシーに対する OWNERSHIP 権限を持っている)、アカウントまたはユーザーにセッションポリシーを設定する責任がある(つまり、 ACCOUNT 権限または APPLY SESSION POLICY ON USER 権限の APPLY SESSION POLICY)ことを前提としています。

注釈

アカウントにポリシーを設定するには、 policy_admin カスタムロールに次の権限が必要です。

  • セッションポリシーを含むデータベースとスキーマの USAGE。

  • セッションポリシーを含むスキーマの CREATE SESSION POLICY。

次のステップに従って、セッションポリシーを実装します。

ステップ1: POLICY_ADMIN カスタムロールを作成する

ユーザーがセッションポリシーを作成および管理できるようにするカスタムロールを作成します。このトピック全体を通して、カスタムロールの例には policy_admin という名前が付けられていますが、ロールには適切な名前を付けることができます。

カスタムロールがすでに存在する場合は、次のステップに進みます。

それ以外の場合は、 POLICY_ADMIN カスタムロールを作成します。

use role useradmin;

create role policy_admin;

ステップ2: POLICY_ADMIN カスタムロールに権限を付与する

POLICY_ADMIN カスタムロールに次の権限がまだない場合は、以下に示すようにこれらの権限を付与します。

  • USAGE セッションポリシーを含むデータベースとスキーマ。

  • セッションポリシーを含むスキーマの CREATE SESSION POLICY。

  • アカウントの APPLY SESSION POLICY。

  • ユーザーレベルでセッションポリシーを設定する場合は、各ユーザーの APPLY SESSION POLICY。

use role securityadmin;

grant usage on database my_database to role policy_admin;

grant usage, create session policy on schema my_schema to role policy_admin;

grant create session policy on schema my_schema to role policy_admin;

grant apply session policy on account to role policy_admin;

-- If associating a session policy with an individual user.
grant apply session policy on user jsmith to role policy_admin;

詳細については、 DDL コマンド、操作、および権限の概要 をご参照ください。

ステップ3: 新しいセッションポリシーを作成する

POLICY_ADMIN カスタムロールを使用して、プログラムクライアント、Snowflakeクライアント、およびウェブインターフェイスのアイドルタイムアウト値がそれぞれ 60 分である新しいセッションポリシーを作成します。詳細については、 CREATE SESSION POLICY をご参照ください。

use role policy_admin;

CREATE SESSION POLICY my_database.my_schema.session_policy_prod_1
  SESSION_IDLE_TIMEOUT_MINS = 60
  SESSION_UI_IDLE_TIMEOUT_MINS = 60
  COMMENT = 'Session policy for the prod_1 environment'
;

条件:

my_database.my_schema.session_policy_prod_1

セッションポリシーの完全修飾名。

session_idle_timeout_mins = 60

Snowflakeクライアントおよびプログラムクライアントのアイドルタイムアウト期間(分単位)。

session_ui_idle_timeout_mins = 30

Snowflakeウェブインターフェイスのアイドルタイムアウト期間(分単位)。

comment = 'Session policy for the prod_1 environment'

セッションポリシーの目的を指定するコメント。

ステップ4: アカウントまたはユーザーにセッションポリシーを設定する

POLICY_ADMIN カスタムロールを使用して、 ALTER ACCOUNT コマンドでアカウントにポリシーを設定するか、 ALTER USER コマンドでユーザー(例: ユーザー名 jsmith)を設定します。

use role policy_admin;

alter account set session policy my_database.my_schema.session_policy_prod_1;

-- user

alter user jsmith set session policy my_database.my_schema.session_policy_prod_1_jsmith;

重要

アカウントまたはユーザーにすでに設定されているセッションポリシーを置き換えるには、最初にセッションポリシーの設定を解除してから、アカウントまたはユーザーに新しいセッションポリシーを設定します。例:

alter account unset session policy;

alter account set session policy my_database.my_schema.session_policy_prod_2;

ステップ5: セッションポリシーを適用する --- オプション

アカウント管理者(つまり、 ACCOUNTADMIN システムロールを持つユーザー)として、 ENFORCE_SESSION_POLICY パラメーターを設定します。

alter account set enforce_session_policy = true;

重要

ENFORCE_SESSION_POLICY パラメーターが TRUE に設定されている場合、

  • 従来のウェブインターフェイスで複数のワークシートを開いている場合は、次の箇条書きに示すように、任意のワークシートでのユーザーアクティビティにより、監視対象の idle_session_timeout_value が更新されます。

  • 従来のウェブインターフェイスは、マウスクリック、結果のスクロール、キーボードクリックなどのユーザーアクティビティを追跡し、内部のSnowflakeモニターにハートビートを送信します。このハートビートの記録は3分ごとに送信され、設定することはできません。

    このパラメーター設定すると、監視対象のアイドルセッションタイムアウト値が次のように更新されます。

    idle_session_timeout_value = (default_idle_timeout - session_policy_timeout) + 3 minutes
    

    たとえば、 default_idle_timeout の値は4時間で、 session_policy_timeout の値は1時間(つまり session_idle_timeout_mins = 60)である場合、監視対象の idle_session_timeout_value は次のようになります。

    idle_session_timeout_value = (240-60) + 3
    
    idle_session_timeout_value = 183 minutes
    

セッションポリシー権限参照

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

注釈

セッションポリシーはスキーマレベルのオブジェクトです。

セッションポリシー上で動作するには、親データベースおよび親スキーマでの USAGE 権限も必要です。

権限

使用法

CREATE SESSION POLICY

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

APPLY SESSION POLICY

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

OWNERSHIP

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

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

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

操作

必要な権限

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

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

マスキングポリシーを変更する

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

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

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

セッションポリシーを説明する

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

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

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

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

アカウントの場合は、アカウントに対する APPLY SESSION POLICY 権限を持つロール。 . ユーザーの場合は、 USER <ユーザー名> 権限の APPLY SESSION POLICY を持つロール。

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

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

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

alter account set session policy <policy_name>;
alter account unset session policy;

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

alter user <username> set session policy <policy_name>;
alter user <username> unset session policy;

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

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

    回避策は、 このトピック内 で示されているように、 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 コンパイルエラー: スキーマ「<スキーマ名>」が存在しないか、許可されていません。

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

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

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