Snowflakeセッションおよびセッションポリシー¶
このトピックでは、Snowflakeセッションとセッションポリシーについて説明し、アカウントまたはユーザーレベルでセッションポリシーを構成する手順について説明します。
このトピックの内容:
Snowflakeセッション¶
セッションは、ユーザーがSnowflakeに接続し、Snowflakeプログラムクライアント、 Snowsight、または Classic Console を使用して正常に認証されたときに開始されます。セッションは、IDプロバイダー(つまり IdP)セッションから独立しています。Snowflakeセッションの有効期限が切れても、 IdP セッションがアクティブなままの場合、ユーザーは認証情報を再度入力せずにSnowflakeにログインできます(つまり、サイレント認証)。
セッションは、ユーザーの継続的なアクティビティにより、無期限に維持されます。 アイドルセッションタイムアウト と呼ばれる、セッションで非アクティブな期間の後では、ユーザーはSnowflakeに対して再度認証する必要があります。アイドルセッションタイムアウトの最大値は4時間で、セッションポリシーによってアイドルセッションタイムアウト期間を変更できます。アイドルセッションタイムアウトは、以下に適用されます。
サポートされている コネクタとドライバー。
サポートされているコネクタまたはドライバーを使用してSnowflakeに接続する、サードパーティクライアント。
Snowflakeは、可能であれば既存のセッションを再利用し、セッションが不要になったときにSnowflakeへの接続を閉じることをお勧めします。
Snowsightセッション¶
Snowflakeは Snowsight の各ワークシートに新しいセッションを作成します。ワークシートセッションは、ワークシートを作成するユーザーに適用されるセッションポリシーを実施します。
注意
ABORT_DETACHED_QUERY パラメーターがtrueに設定されている場合に、セッションが終了してユーザーがログアウトしても、アクティブなクエリは キャンセルされません。
従来のコンソールセッション¶
Worksheets タブでは、新しいワークシートが作成されるたびにSnowflakeが新しいセッションを作成します。各ワークシートは最大4時間のアイドル動作に制限されており、各ワークシートのアイドルタイムアウトは個別に追跡されます。
ワークシートが 閉じられる と、ワークシートのユーザーセッションは終了します。
開いた ワークシートが4時間の制限時間を経過すると、Snowflakeはユーザーをウェブインターフェイスからログアウトします。
注釈
クエリ結果セットのスクロールやデータセットの並べ替えなどの受動的な動作は、アイドルセッションタイムアウトトラッカーをリセットしないことに注意してください。
セッションの閉じられるのが早すぎたり、 Classic Console からログアウトされたりしないようにするには、必要な SQL ステートメントをローカルファイルに保存し、使用されていない開いているワークシートをすべて閉じます。
セッションポリシー¶
セッションポリシーは、 アイドル セッションタイムアウト期間を分単位で定義し、デフォルトのアイドルタイムアウト値である4時間を上書きするオプションを提供します。
セッションポリシーは、コンプライアンス要件に対応するために、構成可能なアイドルタイムアウト期間を持つアカウントまたはユーザーに設定できます。ユーザーがアカウントとユーザーレベルのセッションポリシーの両方に関連付けられている場合は、ユーザーレベルのセッションポリシーが優先されます。アカウントまたはユーザーにセッションポリシーが設定されると、Snowflakeはセッションポリシーを適用します。
セッションポリシーの動作を管理するプロパティは2つあります。
プログラムクライアントおよびSnowflakeクライアント用
SESSION_IDLE_TIMEOUT_MINS
。SESSION_UI_IDLE_TIMEOUT_MINS
および Classic Console の Snowsight。
タイムアウト期間は、Snowflakeへの認証が成功すると始まります。セッションポリシーが設定されていない場合、Snowflakeはデフォルト値の 240
分(つまり4時間)を使用します。セッションポリシーの設定可能な最小アイドルタイムアウト値は 5
分です。セッションが期限切れになった場合、ユーザーはSnowflakeに対して再度認証する必要があります。ただし、Snowflakeは、 カスタムログアウトエンドポイント で定義された設定を強制しません。
詳細については、次をご参照ください。
セッションの使用状況をモニターするための SESSIONS ビュー。
考慮事項¶
クライアントが CLIENT_SESSION_KEEP_ALIVE オプションをサポートし、オプションが
TRUE
に設定されている場合、クライアントは、Snowflakeへの接続がアクティブである限り、Snowflakeセッションを無期限に保持します。それ以外の場合、オプションがFALSE
に設定されていると、セッションは4時間後に終了します。可能であれば、このオプションの使用は避けてください。使用すると、多くのオープンセッションが発生し、パフォーマンスを低下させる恐れのある、リソースへの要求が大きくなる可能性があります。CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY パラメーター使用して、クライアントがセッションのトークンを更新しようとする間隔の秒数を指定できます。DDL および DML ステートメントの実行など、Snowflakeオブジェクトが引き続き使用されると、ウェブインターフェイスセッションを更新できます。Snowflakeは、30秒ごとにこの動作をチェックします。
新しいワークシートを作成するか、既存のワークシートを開くと、確立されたユーザーセッションが引き続き使用されますが、アイドルセッションのタイムアウトは0にリセットされます。
セッションポリシーの使用状況の追跡:
Account Usage SESSION_POLICIES ビューをクエリして、Snowflakeアカウントの各セッションポリシーの行を返します。
Information Schemaテーブル関数 POLICY_REFERENCES を使用して、指定されたセッションポリシーに割り当てられた各ユーザーの行と、Snowflakeアカウントに割り当てられたセッションポリシーの行を返します。
現在、セッションポリシーでは次の構文のみがサポートされています。
POLICY_REFERENCES( POLICY_NAME => '<session_policy_name>' )
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' ) );
制限事項¶
- 将来の付与:
セッションポリシーに対する権限の 将来の付与 はサポートされていません。
回避策として、カスタムロールに APPLYSESSION POLICY 権限を付与して、そのロールがユーザーまたはSnowflakeアカウントにセッションポリシーを適用できるようにします。
セッションポリシーの実装¶
次のステップは、セッションポリシーを実装するための代表的なガイドです。
これらのステップは、 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 mydb TO ROLE policy_admin;
GRANT USAGE, CREATE SESSION POLICY ON SCHEMA mydb.policies TO ROLE policy_admin;
GRANT APPLY SESSION POLICY ON ACCOUNT TO ROLE policy_admin;
セッションポリシーを個々のユーザーに関連付ける場合、
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 mydb.policies.session_policy_prod_1
SESSION_IDLE_TIMEOUT_MINS = 60
SESSION_UI_IDLE_TIMEOUT_MINS = 60
COMMENT = 'Session policy for the prod_1 environment'
;
条件:
mydb.policies.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 mydb.policies.session_policy_prod_1;
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 mydb.policies.session_policy_prod_2;
ステップ5: セッションポリシーをターゲットアカウントに複製する¶
セッションポリシーとその参照(つまり、ユーザーまたはアカウントへの割り当て)は、データベースの複製とアカウントの複製を使用して、ソースアカウントからターゲットアカウントに複製できます。詳細については、次をご参照ください。
セッションポリシーの管理¶
セッションポリシー権限参照¶
Snowflakeは、ユーザーがセッションポリシーを作成、設定、および所有できるかどうかを決定するために、次の権限をサポートしています。
スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。
権限 |
使用状況 |
---|---|
CREATE |
スキーマで、新しいセッションポリシーを作成できるようにします。 |
APPLY SESSION POLICY |
アカウントまたはユーザーレベルでセッションポリシーを適用できるようにします。 |
OWNERSHIP |
セッションポリシーに対する包括的な制御を付与します。セッションポリシーのほとんどのプロパティを変更するために必要です。 |
DDL コマンド、操作、および権限の概要¶
次のテーブルは、セッションポリシー 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;ALTER ACCOUNT UNSET SESSION POLICY;
ユーザーレベルのセッションポリシーを設定または設定解除するには、以下に示すように ALTER USER コマンドを実行します。
ALTER USER jsmith SET SESSION POLICY mydb.policies.session_policy_prod_1_jsmith;ALTER USER jsmith 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 コンパイルエラー: スキーマ「<スキーマ名>」が存在しないか、許可されていません。
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 コマンドの構文、およびセッションポリシー、データベース、およびスキーマを操作するための権限を確認します。