Catégories :

Fonctions contextuelles

CURRENT_AVAILABLE_ROLES

Renvoie une chaîne (VARCHAR) qui répertorie tous les rôles au niveau du compte accordés à l’utilisateur actuel.

La chaîne renvoyée contient une liste codée JSON de tous les rôles que l’utilisateur peut activer dans une session utilisateur (à l’aide des instructions USE ROLE ou USE SECONDARY ROLES).

La liste comprend tous les rôles qui sont accordés directement à l’utilisateur ainsi que tous les rôles inférieurs dans la hiérarchie de ces rôles. La valeur renvoyée peut être transmise à la fonction PARSE_JSON pour obtenir une VARIANT qui contient une liste de tous les rôles disponibles.

Voir aussi :

CURRENT_ROLE , CURRENT_SECONDARY_ROLES , IS_ROLE_IN_SESSION

Syntaxe

CURRENT_AVAILABLE_ROLES()
Copy

Notes sur l’utilisation

  • Cette fonction renvoie une liste de rôles au niveau du compte uniquement lorsqu’elle est interrogée par un utilisateur. L’interrogation de la fonction à l’aide d’un service qui n’a pas d’utilisateur actif peut entraîner l’échec de la requête. Par exemple, la fonction ne renvoie pas une liste de rôles lorsqu’elle est interrogée dans le cadre d’une tâche, car les exécutions de tâches sont exécutées par un service système qui n’est pas associé à un utilisateur. Dans ce cas, la requête peut être interrompue parce que le plan de requête ne peut pas être complété.

  • Cette fonction ne renvoie pas les noms des rôles de base de données.

  • Cette fonction ne tient pas compte de l’activation des rôles dans une session.

    Par exemple, si l’on spécifie cette fonction dans les conditions d’une politique de masquage ou d’une politique d’accès aux lignes, la politique pourrait restreindre l’accès par inadvertance.

    Si l’activation des rôles et la hiérarchie des rôles sont nécessaires dans les conditions de la politique, utilisez IS_ROLE_IN_SESSION.

Exemples

Renvoyez la liste des rôles accordés à l’utilisateur actuel :

SELECT CURRENT_AVAILABLE_ROLES();

+----------------------------------------------------------+
| ROW | CURRENT_AVAILABLE_ROLES()                          |
+-----+----------------------------------------------------+
|  1  | [ "PUBLIC", "ANALYST", "DATA_ADMIN", "DATA_USER" ] |
+-----+----------------------------------------------------+
Copy

Utilisez la fonction PARSE_JSON pour renvoyer une VARIANT et la fonction FLATTEN pour obtenir une seule ligne pour chaque rôle :

SELECT INDEX,VALUE,THIS FROM TABLE(FLATTEN(input => PARSE_JSON(CURRENT_AVAILABLE_ROLES())));

+-----+-------+------------------------+---------------------------+
| ROW | INDEX | VALUE                  | THIS                      |
+-----+-------+------------------------+---------------------------+
|   1 |     0 | "PUBLIC"               | [                         |
|     |       |                        |   "PUBLIC",               |
|     |       |                        |   "ANALYST",              |
|     |       |                        |   "DATA_ADMIN",           |
|     |       |                        |   "DATA_USER"             |
|     |       |                        | ]                         |
+-----+-------+------------------------+---------------------------+
|   2 |     1 | "ANALYST"              | [                         |
|     |       |                        |   "PUBLIC",               |
|     |       |                        |   "ANALYST",              |
|     |       |                        |   "DATA_ADMIN",           |
|     |       |                        |   "DATA_USER"             |
|     |       |                        | ]                         |
+-----+-------+------------------------+---------------------------+
|   3 |     2 | "DATA_ADMIN"           | [                         |
|     |       |                        |   "PUBLIC",               |
|     |       |                        |   "ANALYST",              |
|     |       |                        |   "DATA_ADMIN",           |
|     |       |                        |   "DATA_USER"             |
|     |       |                        | ]                         |
+-----+-------+------------------------+---------------------------+
|   4 |     3 | "DATA_USER"            | [                         |
|     |       |                        |   "PUBLIC",               |
|     |       |                        |   "ANALYST",              |
|     |       |                        |   "DATA_ADMIN",           |
|     |       |                        |   "DATA_USER"             |
|     |       |                        | ]                         |
+-----+-------+------------------------+---------------------------+
Copy