セッションポリシーの管理¶
このトピックでは、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;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;
セッションポリシーの監査¶
SESSION_POLICIES ビュー ビューをクエリして、Snowflakeアカウントの各セッションポリシーとそのメタデータの行を返すことができます。
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' ));
セッションポリシーのトラブルシューティング¶
セッションポリシーがアカウントまたはユーザーに割り当てられ、セッションポリシーを含むデータベースまたはスキーマがドロップされた後、新しいセッションポリシーがアカウントまたはユーザーに割り当てられた場合、ユーザーは、新しいセッションポリシーのアイドルセッションタイムアウト値に保持されません。
回避策は、 このトピック内 で示されているように、 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 コマンドの構文、およびセッションポリシー、データベース、およびスキーマを操作するための権限を確認します。