Sessions Snowflake et politiques de session

Cette rubrique décrit les sessions Snowflake et les politiques de session et fournit des instructions pour configurer les politiques de session au niveau du compte ou de l’utilisateur.

Dans ce chapitre :

Sessions Snowflake

Une session commence lorsqu’un utilisateur se connecte à Snowflake et réussit à s’authentifier en utilisant un client automatique Snowflake, Snowsight, ou l”classic web interface. Une session est indépendante de la session d’un fournisseur d’identité (c’est-à-dire IdP). Si la session Snowflake expire mais que la session IdP reste active, un utilisateur peut se connecter à Snowflake sans saisir à nouveau ses identifiants de connexion (authentification silencieuse).

Avec une activité continue de l’utilisateur, une session client est maintenue indéfiniment. Après une période d’inactivité de la session, connue sous le nom de expiration de session inactive, l’utilisateur doit s’authentifier à nouveau auprès de Snowflake. Le délai d’expiration d’une session inactive a une valeur maximale de quatre heures et une politique de session peut modifier le délai d’expiration d’une session inactive. Le délai d’expiration d’une session inactive s’applique aux éléments suivants :

Snowflake recommande de réutiliser les sessions existantes lorsque cela est possible et de fermer la connexion à Snowflake lorsqu’une session n’est plus nécessaire.

Sessions d’interface Web classique de Snowflake

Dans l’onglet Worksheets Worksheet tab Snowflake crée une nouvelle session chaque fois qu’une nouvelle feuille de calcul est créée. Chaque feuille de calcul est limitée à un maximum de 4 heures d’inactivité, et le délai d’inactivité de chaque feuille de calcul est suivi séparément.

Lorsqu’une feuille de calcul est fermée, la session de l’utilisateur pour cette feuille de calcul se termine.

Après l’expiration du délai de 4 heures pour toute feuille de calcul ouverte Snowflake déconnecte l’utilisateur de l’interface Web.

Note

Notez que les comportements passifs tels que le défilement du jeu de résultats d’une requête ou le tri d’un ensemble de données ne remettent pas à zéro le suivi du délai d’expiration d’une session inactive.

Pour éviter de fermer une session trop tôt et d’être déconnecté de l’interface Web classique, enregistrez toutes les instructions SQL nécessaires dans un fichier local et fermez toutes les feuilles de calcul ouvertes qui ne sont pas utilisées.

Politiques de la session

Une politique de session définit le délai d’expiration d’une session inactive en minutes et offre la possibilité de remplacer la valeur par défaut du délai d’inactivité de 4 heures.

La politique de session peut être définie pour un compte ou un utilisateur avec des délais d’expiration en cas d’inactivité configurables pour répondre à des exigences de conformité. Si un utilisateur est associé à la fois à une politique de session de compte et de niveau utilisateur, la politique de session de niveau utilisateur a la priorité.

Il existe deux propriétés qui régissent le comportement de la politique de session :

  • SESSION_IDLE_TIMEOUT_MINS pour les clients automatiques et les clients Snowflake.

  • SESSION_UI_IDLE_TIMEOUT_MINS pour l’interface Web classique.

Le délai d’expiration commence dès que l’authentification à Snowflake a réussi. Si une politique de session n’est pas définie, Snowflake utilise une valeur par défaut de 240 minutes (c’est-à-dire 4 heures). La valeur minimale configurable du délai d’expiration d’une session inactive pour une politique de session est de 5 minutes. Lorsque la session expire, l’utilisateur doit s’authentifier à nouveau auprès de Snowflake.

Note

Notez les points suivants concernant les politiques de session :

Pour plus d’informations, voir :

Considérations

  • Si un client prend en charge l’option CLIENT_SESSION_KEEP_ALIVE et que l’option est définie sur TRUE, le client préserve la session Snowflake indéfiniment tant que la connexion à Snowflake est active. Sinon, si l’option a pour valeur FALSE, la session se termine après 4 heures. Dans la mesure du possible, évitez d’utiliser cette option, car elle peut entraîner l’ouverture de nombreuses sessions et une plus grande demande de ressources, ce qui peut entraîner une dégradation des performances.

  • Vous pouvez utiliser le paramètre CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY pour spécifier le nombre de secondes entre les tentatives du client pour mettre à jour le jeton pour la session. La session de l’interface Web peut être actualisée au fur et à mesure que des objets Snowflake continuent d’être utilisés, comme l’exécution des instructions DDL et DML. Snowflake vérifie ce comportement toutes les 30 secondes.

  • La création d’une nouvelle feuille de calcul ou l’ouverture d’une feuille de calcul existante continue à utiliser la session utilisateur établie, mais avec un délai d’expiration de session inactive réinitialisé à 0.

Limites

  • Snowsight ne prend actuellement pas en charge les politiques de session. Cette prise en charge est prévue lorsque les politiques de session seront généralement disponibles (GA).

  • Réplication. La réplication de base de données et le basculement/la restauration automatique n’incluent pas les politiques de session et leurs associations dans un instantané des objets de la base de données. Cette prise en charge est attendue lorsque les politiques de session seront généralement disponibles.

Mise en œuvre d’une politique de session

Les étapes suivantes constituent un guide représentatif de la mise en œuvre d’une politique de session.

Ces étapes supposent une approche de gestion centralisée dans laquelle un rôle personnalisé nommé policy_admin possède la politique de session (c’est-à-dire qu’il dispose du privilège OWNERSHIP sur la politique de session) et est chargé de définir la politique de session sur un compte ou un utilisateur (c’est-à-dire qu’il dispose du privilège APPLY SESSION POLICY sur ACCOUNT ou du privilège APPLY SESSION POLICY ON USER).

Note

Pour définir une politique sur un compte, le rôle personnalisé policy_admin doit avoir les permissions suivantes :

  • USAGE sur la base de données et le schéma qui contiennent la politique de session.

  • CREATE SESSION POLICY sur le schéma qui contient la politique de session.

Suivez ces étapes pour mettre en œuvre une politique de session.

Étape 1 : créer le rôle personnalisé POLICY_ADMIN

Créez un rôle personnalisé qui permet à des utilisateurs de créer et de gérer des politiques de session. Dans cette rubrique, l’exemple de rôle personnalisé est nommé policy_admin, bien que le rôle puisse avoir n’importe quel nom approprié.

Si le rôle personnalisé existe déjà, passez à l’étape suivante.

Sinon, créez le rôle personnalisé POLICY_ADMIN.

use role useradmin;

create role policy_admin;

Étape 2 : accorder des privilèges au rôle personnalisé POLICY_ADMIN

Si le rôle personnalisé POLICY_ADMIN ne dispose pas déjà des privilèges suivants, accordez ces privilèges comme indiqué ci-dessous :

  • USAGE sur la base de données et le schéma qui contiendront la politique de session.

  • CREATE SESSION POLICY sur le schéma qui contiendra la politique de session.

  • APPLY SESSION POLICY sur le compte.

  • APPLY SESSION POLICY sur chaque utilisateur, si vous prévoyez de définir des politiques de session au niveau de l’utilisateur.

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;

Pour plus d’informations, voir Résumé des commandes, des opérations et des privilèges DDL.

Étape 3 : créer une nouvelle politique de session

En utilisant le rôle personnalisé POLICY_ADMIN , créez une nouvelle politique de session où la valeur du délai d’expiration en cas d’inactivité pour les clients automatiques, les clients Snowflake et l’interface Web est de 60 minutes pour chacun. Pour plus d’informations, voir 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'
;

Où :

my_database.my_schema.session_policy_prod_1

Le nom entièrement qualifié de la politique de session.

session_idle_timeout_mins = 60

Le délai d’expiration en cas d’inactivité en minutes pour les clients Snowflake et les clients automatiques.

session_ui_idle_timeout_mins = 30

Le délai d’expiration en cas d’inactivité en minutes pour l’interface Web de Snowflake.

comment = 'Session policy for the prod_1 environment'

Un commentaire spécifiant l’objectif de la politique de session.

Étape 4 : définir la politique de session sur un compte ou un utilisateur

En utilisant le rôle personnalisé POLICY_ADMIN, définissez la politique sur un compte avec la commande ALTER ACCOUNT ou sur un utilisateur (par exemple, le nom d’utilisateur jsmith) avec la commande ALTER USER.

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;

Important

Pour remplacer une politique de session déjà définie pour un compte ou un utilisateur, il faut d’abord la désactiver, puis définir la nouvelle politique pour le compte ou l’utilisateur. Par exemple :

alter account unset session policy;

alter account set session policy my_database.my_schema.session_policy_prod_2;

Étape 5 : appliquer la politique de session — Facultatif

En tant qu’administrateur de compte (c’est-à-dire un utilisateur ayant le rôle système ACCOUNTADMIN), définissez le paramètre ENFORCE_SESSION_POLICY.

alter account set enforce_session_policy = true;

Important

Lorsque le paramètre ENFORCE_SESSION_POLICY est défini sur TRUE :

  • Lorsque plusieurs feuilles de calcul sont ouvertes dans l’interface Web classique, toute activité de l’utilisateur dans une feuille de calcul met à jour la valeur du délai d’expiration d’une session inactive (idle_session_timeout_value) observée, comme le montre le point suivant.

  • L’interface Web classique suit l’activité de l’utilisateur, comme les clics de souris, le défilement des résultats et les clics de clavier, et envoie une pulsation à un moniteur Snowflake interne. Cet enregistrement de pulsation est envoyé toutes les trois minutes et n’est pas configurable.

    La définition de ce paramètre met à jour la valeur du délai d’expiration d’une session inactive observée comme suit :

    idle_session_timeout_value = (default_idle_timeout - session_policy_timeout) + 3 minutes
    

    Par exemple, si la valeur default_idle_timeout est 4 heures et la valeur session_policy_timeout est 1 heure (c’est-à-dire session_idle_timeout_mins = 60), alors la valeur idle_session_timeout_value observée est :

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

Gestion des politiques de session

Référence des privilèges de la politique de session

Snowflake prend en charge les privilèges de politique de session suivants pour déterminer si les utilisateurs peuvent créer, définir et posséder des balises de session.

Note

Les politiques de session sont des objets de niveau schéma.

Effectuer des opérations sur une politique de session nécessite également le privilège USAGE sur la base de données et le schéma parents.

Privilège

Utilisation

CREATE SESSION POLICY

À définir sur le schéma dans lequel vous créez une politique de session. Permet de créer une nouvelle politique de session dans un schéma.

APPLY SESSION POLICY

À définir sur le compte ou sur les utilisateurs individuels. Permet d’appliquer une politique de session au niveau du compte ou de l’utilisateur.

OWNERSHIP

À définir sur une politique de session. Permet d’accorder un contrôle total sur la politique de session. Nécessaire pour modifier la plupart des propriétés d’une politique de session.

Résumé des commandes, des opérations et des privilèges DDL

Le tableau suivant résume la relation entre les opérations DDL de politique de session et leurs privilèges nécessaires.

Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.

Opération

Privilège requis

Créer une politique de session

Un rôle avec le privilège CREATE SESSION POLICY sur le schéma.

Modifier une politique de session

Un rôle avec le privilège OWNERSHIP sur la politique de session.

Détruire la politique de session

Un rôle avec le privilège OWNERSHIP sur la politique de session.

Décrire la politique de session

Un rôle avec le privilège OWNERSHIP sur la politique de session ou . le privilège APPLY SESSION POLICY sur le compte.

Afficher les politiques de session

Un rôle avec le privilège OWNERSHIP sur la politique de session ou . le privilège APPLY SESSION POLICY sur le compte.

Définir et annuler une politique de session

Pour les comptes, un rôle avec le privilège APPLY SESSION POLICY sur le compte. . Pour les utilisateurs, un rôle avec le privilège APPLY SESSION POLICY sur USER <nom_utilisateur>.

Référence DDL de politique de session

Snowflake fournit les commandes DDL suivantes pour gérer les objets de politique de session.

Pour définir ou désactiver une politique de session sur le compte, exécutez la commande ALTER ACCOUNT comme indiqué ci-dessous.

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

Pour définir ou désactiver une politique de session au niveau de l’utilisateur, exécutez la commande ALTER USER comme indiqué ci-dessous.

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

Dépannage des politiques de session

  • Si une politique de session est affectée à un compte ou à un utilisateur et que la base de données ou le schéma qui contient la politique de session est détruit, puis qu’une nouvelle politique de session est affectée au compte ou à l’utilisateur, l’utilisateur ne sera pas tenu de respecter la ou les valeurs du délai d’expiration d’une session inactive de la nouvelle politique de session.

    La solution de contournement consiste à annuler la politique de session d’origine du compte à l’aide d’une commande ALTER ACCOUNT ou de l’utilisateur à l’aide d’une commande ALTER USER comme indiqué dans ce chapitre.

  • Le tableau suivant résume certains messages d’erreur qui peuvent se produire avec les politiques de session.

    Comportement

    Message d’erreur

    Action de dépannage

    Impossible de créer une politique de session.

    Impossible d’exécuter CREATE SESSION POLICY. Cette session ne dispose pas d’une base de données actuelle. Appelez « USE DATABASE » ou utilisez un nom qualifié.

    Spécifiez une base de données avant d’exécuter CREATE SESSION POLICY ou utilisez le nom d’objet entièrement qualifié dans l’instruction CREATE SESSION POLICY.

    Impossible de créer une politique de session.

    Erreur de contrôle d’accès SQL : privilèges insuffisants pour effectuer des opérations sur le schéma « <nom_schéma> »

    Vérifiez que le rôle qui exécute l’instruction CREATE SESSION POLICY possède le privilège CREATE SESSION POLICY sur SCHEMA.

    Impossible de créer une politique de session.

    Erreur de compilation SQL : la base de données « <nom_base_de_données> » n’existe pas ou n’est pas autorisée.

    Vérifiez que la base de données existe et que le rôle qui exécute l’instruction CREATE SESSION POLICY possède le privilège USAGE sur le schéma dans lequel la politique de session doit exister.

    Impossible d’exécuter une instruction de description.

    Erreur de compilation SQL : le schéma « <nom_schéma> » n’existe pas ou n’est pas autorisé.

    Vérifiez que le rôle qui exécute l’instruction DROP SESSION POLICY possède le privilège OWNERSHIP sur la stratégie de session ou le privilège APPLY SESSION POLICY sur ACCOUNT.

    Impossible de détruire une politique de session.

    Erreur de compilation SQL : la politique de session « <nom_politique> » n’existe pas ou n’est pas autorisée.

    Vérifiez que le rôle qui exécute l’instruction DROP SESSION POLICY possède le privilège OWNERSHIP sur la politique de session.

    Impossible de détruire une politique de session.

    La politique de session <nom_politique> ne peut pas être détruite, car elle est associée à un compte.

    Annulez la politique de session du compte avec une instruction ALTER ACCOUNT et relancez l’instruction de suppression.

    Impossible de définir une politique de session sur un compte.

    La politique de session « <nom_politique> » est déjà associée au compte « <nom_compte> ».

    Un compte ne peut avoir qu’une seule politique de session active. Déterminez quelle politique de session doit être définie pour le compte. . Si nécessaire, annulez la politique de session actuelle du compte avec une commande ALTER ACCOUNT ; puis définissez l’autre politique de session sur le compte avec une autre commande ALTER ACCOUNT.

    Impossible de définir une valeur de délai d’expiration.

    Erreur de compilation SQL : valeur non valide « <entier> » pour la propriété « session_idle_timeout_mins ».

    La valeur du délai d’attente de la session, en minutes, doit être un nombre entier compris entre 5 et 240, inclus. . Choisissez un nombre entier valide pour le délai d’expiration de session et exécutez à nouveau l’instruction CREATE ou ALTER SESSION POLICY.

    Impossible de mettre à jour une politique de session existante.

    Erreur de compilation SQL : la politique de session « <nom_politique> » n’existe pas ou n’est pas autorisée.

    Vérifiez le nom de la politique de session, la syntaxe de la commande ALTER SESSION POLICY et les privilèges permettant d’agir sur la politique de session, la base de données et le schéma.

Revenir au début