Présentation des UDFs SQL

Ce chapitre couvre des concepts et des détails d’utilisation spécifiques aux UDFs SQL (fonctions définies par l’utilisateur).

Pour une introduction aux UDFs, et pour des informations qui s’appliquent à tous les types d’UDFs, voir Aperçu des UDFs.

Dans ce chapitre :

Utilisation générale

Un UDF SQL évalue une expression arbitraire SQL et retourne les résultats de l’expression.

La définition de la fonction peut être une expression SQL qui retourne soit une valeur scalaire (c’est-à-dire unique), soit, si elle est définie comme fonction de table, un ensemble de lignes.

Exigences en matière de sécurité et de privilège pour les UDFs SQL

Si une définition de fonction fait référence à une table non qualifiée, cette table est résolue dans le schéma contenant la fonction. Une référence à un autre objet de schéma (par exemple, une table, une vue ou une autre fonction) nécessite que le propriétaire de la fonction ait les privilèges nécessaires pour accéder à cet objet de schéma. L’appelant de la fonction n’a pas besoin d’avoir accès aux objets référencés dans la définition de la fonction, mais seulement d’avoir le privilège d’utiliser la fonction.

Par exemple, un administrateur possède une table nommée users, qui contient des données sensibles qui ne sont pas généralement accessibles, mais l’administrateur peut afficher le nombre total d’utilisateurs grâce à une fonction sur laquelle les autres utilisateurs ont des privilèges d’accès :

use role dataadmin;

desc table users;

+-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------+
| name      | type         | kind   | null? | default | primary key | unique key | check  | expression | comment |
|-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------|
| USER_ID   | NUMBER(38,0) | COLUMN | Y     | [NULL]  | N           | N          | [NULL] | [NULL]     | [NULL]  |
| USER_NAME | VARCHAR(100) | COLUMN | Y     | [NULL]  | N           | N          | [NULL] | [NULL]     | [NULL]  |
  ...
  ...
  ...
+-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------+

create function total_user_count() returns number as 'select count(*) from users';

grant usage on function total_user_count() to role analyst;

use role analyst;

-- This will fail because the role named "analyst" does not have the
-- privileges required in order to access the table named "users".
select * from users;

FAILURE: SQL compilation error:
Object 'USERS' does not exist.

-- However, this will succeed.
select total_user_count();

+--------------------+
| TOTAL_USER_COUNT() |
|--------------------+
| 123                |
+--------------------+

Pour plus d’informations sur les rôles et les privilèges de gestion du contrôle d’accès, voir Contrôle d’accès dans Snowflake.

Revenir au début