Catégories :

Fonctions contextuelles (général)

SYS_CONTEXT (espace de noms SNOWFLAKE$SESSION)

Renvoie des informations sur la session dans laquelle la fonction est appelée.

Vous pouvez appeler cette fonction dans les contextes suivants :

  • Vous pouvez appeler cette fonction directement dans la session en cours.

  • Vous pouvez exécuter un exécutable des droits de l’appelant (par exemple, une procédure stockée des droits de l’appelant) qui appelle cette fonction.

  • Vous pouvez exécuter un exécutable des droits du propriétaire (par exemple, une procédure stockée des droits du propriétaire) qui appelle cette fonction, à condition que le rôle de propriétaire ait reçu le privilège READ SESSION sur le compte.

Dans tout autre contexte, la fonction renvoie NULL.

Voir aussi :

SYS_CONTEXT, SYS_CONTEXT (espace de noms SNOWFLAKE$APPLICATION), SYS_CONTEXT (espace de noms SNOWFLAKE$ENVIRONMENT), SYS_CONTEXT (espace de noms SNOWFLAKE$ORGANIZATION)

Syntaxe

Syntaxe pour la récupération des propriétés :

SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<property>'
)
Copy

Syntaxe pour l’appel des fonctions :

SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<function>' , '<argument>' [ , ... ]
)
Copy

Arguments

'SNOWFLAKE$SESSION'

Spécifie que vous souhaitez récupérer une propriété ou appeler une fonction pour renvoyer des informations sur la session dans laquelle la fonction est appelée.

'property'

Nom de la propriété à récupérer. Vous pouvez spécifier les propriétés suivantes :

Propriété

Description

PRINCIPAL_NAME

Nom du principal (l’utilisateur, la tâche :doc:` </user-guide/tasks-intro>`, ou le service SPCS) qui a démarré la session. Le nom dépend de la valeur de la propriété PRINCIPAL_TYPE :

  • Si PRINCIPAL_TYPE est l’une des valeurs suivantes, la valeur de la propriété``PRINCIPAL_NAME`` est le nom de l’utilisateur :

    • USER

    • USER_PERSON

    • USER_SERVICE

    • USER_LEGACY_SERVICE

  • Si PRINCIPAL_TYPE est TASK, la valeur est le nom de la tâche.

  • Si PRINCIPAL_TYPE est SNOWSERVICE, la valeur est le nom du service SPCS.

PRINCIPAL_TYPE

Type du principal qui a démarré la session. Cette propriété peut avoir l’une des valeurs suivantes :

  • USER ou USER_suffix, si un utilisateur a démarré la session. suffix dépend du type de l’utilisateur :

    • Si l’objet utilisateur n’a pas de propriété TYPE, la valeur est USER.

    • Si la propriété TYPE est PERSON, la valeur est USER_PERSON.

    • Si la propriété TYPE est SERVICE, la valeur est USER_SERVICE.

    • Si la propriété TYPE est LEGACY_SERVICE, la valeur est USER_LEGACY_SERVICE.

  • TASK, si une tâche :doc:` </user-guide/tasks-intro>` a démarré la session.

  • SNOWSERVICE, si un service SPCS a démarré la session.

PRINCIPAL_EMAIL

Adresse e-mail associée au principal. S’il n’y a pas d’adresse e-mail associée, la valeur de cette propriété est NULL.

PRINCIPAL_DATABASE

Nom de la base de données contenant l’objet du principal. Par exemple, si le principal est une tâche, la valeur de cette propriété est le nom de la base de données qui contient la tâche.

Si le principal est un objet de niveau compte (comme un utilisateur), la valeur de cette propriété est NULL.

PRINCIPAL_SCHEMA

Nom du schéma contenant l’objet pour le principal. Par exemple, si le principal est une tâche, la valeur de cette propriété est le nom du schéma qui contient la tâche.

Si le principal est un objet de niveau compte (comme un utilisateur), la valeur de cette propriété est NULL.

ID

Identificateur de la session dans laquelle la fonction a été appelée.

ROLE

Rôle principal de la session dans laquelle la fonction a été appelée.

ROLE_TYPE

Type du rôle principal. Cette propriété peut avoir l’une des valeurs suivantes :

  • ROLE, si le rôle principal est un rôle d’utilisateur.

ROLE_DATABASE

Nom de la base de données qui contient le rôle de base de données si le rôle principal est un rôle de base de données.

SECONDARY_ROLES

Le tableau JSON des rôles au niveau du compte activés comme rôles secondaires dans la session. Les rôles activés incluent des rôles qui sont hiérarchiquement sous le rôle demandé. Par exemple, supposons que l’utilisateur ait exécuté :

USE SECONDARY ROLES ACCOUNTADMIN;
Copy

Le tableau JSON pour cette propriété comprend le rôle ACCOUNTADMIN et les rôles SECURITYADMIN, SYSADMIN, et USERADMIN, qui sont sous le rôle ACCOUNTADMIN.

WANTED_SECONDARY_ROLES

Le tableau JSON des rôles au niveau du compte demandés par l’utilisateur. Par exemple, supposons que l’utilisateur ait exécuté :

USE SECONDARY ROLES ACCOUNTADMIN;
Copy

Le tableau JSON pour cette propriété n’inclut que le rôle ACCOUNTADMIN.

DATABASE

Base de données actuelle utilisée pour la session, si le rôle qui a appelé la fonction dispose des privilèges nécessaires pour accéder à la base de données.

SCHEMA

Schéma actuel utilisé pour la session, si le rôle qui a appelé la fonction dispose des privilèges nécessaires pour accéder au schéma.

SCHEMAS

Chemin de recherche actuel des schémas de la session, si le rôle qui a appelé la fonction possède les privilèges pour accéder à la base de données actuelle.

WAREHOUSE

Entrepôt actuel utilisé pour la session.

'function'

Nom de la fonction que vous voulez appeler. Vous pouvez appeler les fonctions suivantes :

'argument' [ , ... ]

Arguments à transmettre à la fonction que vous souhaitez appeler.

Renvoie

La fonction renvoie une valeur VARCHAR ou NULL :

Notes sur l’utilisation

  • Si vous spécifiez l’appel de fonction dans une chaîne entre guillemets doubles dans un shell, isolez le caractère $ avec une barre oblique inverse (\) de sorte que $SESSION ne soit pas interprété comme une variable de shell.

    Par exemple, si vous utilisez Snowflake CLI et que vous spécifiez l’instruction SQL comme argument de ligne de commande entre guillemets doubles :

    snow sql --query "SELECT SYS_CONTEXT('SNOWFLAKE\$SESSION', 'PRINCIPAL_NAME');"
    
    Copy

Exemples

Les exemples suivants montrent comment récupérer les informations de contexte sur la session :

Récupération d’informations sur le principal

L’exemple suivant renvoie le nom et le type du principal qui a appelé la fonction :

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_NAME') AS name,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_TYPE') AS type,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_EMAIL') AS email;
Copy
+--------------+-------------+---------------------+
| NAME         | TYPE        | EMAIL               |
|--------------+-------------+---------------------|
| MY_USER_NAME | USER_PERSON | my.user@example.com |
+--------------+-------------+---------------------+

Récupération d’informations sur les rôles

L’exemple suivant renvoie le nom et le type du rôle principal dans la session où la fonction a été appelée :

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE') AS role,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE_TYPE') AS type;
Copy
+---------+------+
| ROLE    | TYPE |
|---------+------|
| MY_ROLE | ROLE |
+---------+------+

L’exemple suivant utilise le rôle ACCOUNTADMIN comme rôle secondaire. L’exemple renvoie ensuite la liste des rôles secondaires demandés dans la session (ACCOUNTADMIN) et la liste des rôles au niveau du compte qui sont activés comme rôles secondaires dans la session.

La liste des rôles activés comprend des rôles qui sont hiérarchiquement sous le rôle demandé. Parce que le rôle ACCOUTADMIN est activé, la liste comprend SECURITYADMIN, SYSADMIN, et USERADMIN, qui sont sous le rôle ACCOUNTADMIN.

USE SECONDARY ROLES ACCOUNTADMIN;

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'WANTED_SECONDARY_ROLES') AS requested_roles,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'SECONDARY_ROLES') AS requested_roles_with_child_roles;
Copy
+------------------+---------------------------------------------------------+
| REQUESTED_ROLES  | REQUESTED_ROLES_WITH_CHILD_ROLES                        |
|------------------+---------------------------------------------------------|
| ["ACCOUNTADMIN"] | ["ACCOUNTADMIN","SECURITYADMIN","SYSADMIN","USERADMIN"] |
+------------------+---------------------------------------------------------+

Récupération de la base de données, du schéma, du chemin de recherche et de l’entrepôt actuels

L’exemple suivant renvoie la base de données, le schéma et l’entrepôt actuels utilisés pour la session :

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'DATABASE') AS database,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMA') AS schema,
  SYS_CONTEXT('SNOWFLAKE$SESSION', 'WAREHOUSE') AS warehouse;
Copy
+----------+--------+--------------+
| DATABASE | SCHEMA | WAREHOUSE    |
|----------+--------+--------------|
| MY_DB    | PUBLIC | MY_WAREHOUSE |
+----------+--------+--------------+

L’exemple suivant renvoie un tableau JSON contenant le chemin de recherche pour la session :

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS');
Copy
+---------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS') |
|---------------------------------------------|
| ["MY_DB.MY_SCHEMA","MY_DB.PUBLIC"]          |
+---------------------------------------------+

L’exemple suivant renvoie une ligne pour chaque élément du chemin de recherche :

SELECT value::VARCHAR AS path_element
  FROM TABLE(
    FLATTEN(INPUT => PARSE_JSON(SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS'))));
Copy
+-----------------------+
| PATH_ELEMENT          |
|-----------------------|
| BOOKS_DB.BOOKS_SCHEMA |
| BOOKS_DB.PUBLIC       |
+-----------------------+