Informations de référence sur la fonction de stratégie de service

Important

Cette fonctionnalité est en version bêta. Les administrateurs de compte peuvent contrôler l’accès à cette fonctionnalité à partir de la page Aperçus de la console de compte. Consultez Gérer les préversions d’Azure Databricks.

Une stratégie de service personnalisée est une fonction sql définie par l’utilisateur (UDF) inscrite dans le catalogue Unity qui Azure Databricks évalue chaque interaction avec le service auquel il est attaché. Cette page est la référence de champ et de syntaxe pour ces fonctions. Pour connaître la procédure de bout en bout, consultez Créer et attacher une stratégie de service.

Signature de fonction

Une fonction de stratégie de service prend un paramètre unique eventVARIANT et retourne un VARIANT:

CREATE OR REPLACE FUNCTION <catalog>.<schema>.<function_name>(
  event VARIANT
)
RETURNS VARIANT
LANGUAGE SQL
RETURN <expression>;

La fonction s’exécute aux deux points d’évaluation. Branchez-les event:type::string pour les distinguer :

  • 'request': la phase d’entrée (ON CALL), avant que le service ne soit invoqué.
  • 'response': la phase de sortie (ON RESULT), après la réponse du service.

Argument event

event porte les données et le contexte d’interaction. Les champs disponibles dépendent du type de service :

Champ S’applique à Description
event:type Tous les services La phase : 'request' (entrée, SUR APPEL) ou 'response' (sortie, SUR RÉSULTAT).
event:target Tous les services Nom complet du catalogue Unity du service auquel la stratégie est attachée (facultatif).
event:context.actor.run_as Tous les services Identité d’identification à laquelle la requête est autorisée.
event:context.actor.context.is_on_behalf_of Tous les services true lorsqu’un agent ou une application agit pour le compte d’un utilisateur (on-behalf-of ou OBO). Utilisez-le pour écrire des stratégies prenant en charge l’agent qui s’appliquent uniquement lorsqu’un agent agit pour un utilisateur.
event:context.actor.context.client_id Tous les services ID client OAuth de l’identité agissante, lorsqu’il est présent (appels OBO).
event:context.actor.context.actor_resource Tous les services Ressource de l’identité agissante, telle qu’un agent, lorsqu’elle est présente.
event:context.actor.context.is_actor_authenticated Tous les services true lorsque l’identité agissante est authentifiée en tant que client confidentiel.
event:context.tool.name, event:context.tool.arguments MCP Services L’outil appelé et ses arguments (par exemple, event:context.tool.arguments.repo).
event:context.message Services de modèle, services de fournisseur de modèles Dernier message utilisateur ou assistant extrait (indépendant de l’API). Utilisez-la pour les vérifications de contenu.
event:data Services de modèle, services de fournisseur de modèles Charge utile complète de la requête ou de la réponse.
event:request_data Services de modèle, services de fournisseur de modèles La demande originale, disponible pendant la phase de sortie (SUR RÉSULTAT).

Note

L’accès au chemin d’accès (event:...) retourne un VARIANT. Convertissez-le en type scalaire avant de le comparer à un littéral (par exemple, ) ; sinon, event:type::string = 'request'la comparaison échoue avec une DATATYPE_MISMATCH erreur.

Valeur renvoyée

Une stratégie personnalisée est une stratégie de décision : elle retourne un VARIANTresult champ de ALLOW, DENYou ASK (ne respectant pas la casse) et une stratégie facultative reason. La result valeur détermine ce qui se passe :

  • ALLOW: l’interaction se poursuit.
  • DENY: Azure Databricks bloque l’interaction. Au lieu d’une erreur, l’appelant reçoit une réponse réussie (HTTP 200) dont le tour d’assistant signale le blocage, avec le reason dans un objet de premier niveau databricks_service_policy .
  • ASK: l’interaction s’interrompt pour l’approbation humaine avant de continuer.

Générez le résultat avec named_struct et encapsulez-le to_variant_object afin que la fonction retourne un VARIANT, en conservant result et reason en tant que champs de niveau supérieur. Une nue named_struct retourne un STRUCTélément et CAST(... AS VARIANT) n’est pas pris en charge.

to_variant_object(named_struct('result', 'DENY', 'reason', 'GitHub push operations are not permitted by policy.'))

La passerelle accepte également un formulaire d’enveloppe à l’avenir :

to_variant_object(named_struct('decision', named_struct('result', 'DENY', 'reason', '...')))

Note

Accès au champ non fermé : l’accès à un champ qui n’existe pas dans le VARIANT paramètre génère une erreur et génère DENY une erreur (l’accès SQL VARIANT standard retourne NULL des champs manquants). Cela empêche une stratégie d’autoriser une interaction lorsque les champs attendus sont manquants.

SQL pris en charge

Azure Databricks transpile le corps de la stratégie en CEL et l’évalue au moment de l’exécution. Par conséquent, le corps de la fonction ne prend en charge qu’un sous-ensemble restreint de SQL. Azure Databricks rejette une fonction ou une construction non prise en charge lorsque vous attachez la stratégie et que la stratégie échoue (DENY) lors de l’évaluation.

Category Pris en charge dans le corps de la stratégie
Operators Opérateurs arithmétiques, de comparaison, logiques et arithmétiques ; \|\|, IN, LIKE, et IS [NOT] NULL
Flux de contrôle CASE et IF
Diffusions CASTà INT/BIGINT, ,DOUBLE/FLOAT , STRINGou BOOLEAN; l’opérateur ::
Accès aux données Accès au chemin VARIANT / JSON
Fonctions de chaîne CONCAT, , LENGTH, CHAR_LENGTHUPPER, LOWER, SUBSTRING, TRIMLTRIMRTRIMREPLACESTARTSWITHENDSWITHCONTAINS
Autres fonctions COALESCE, , NULLIF, IFNULLNVL, , ABSMODISNULLISNOTNULLNAMED_STRUCTTO_VARIANT_OBJECT

Non pris en charge :ai_query, sous-requêtes, BETWEENfonctions d’agrégation, lambdas / EXISTSet variadic ou CONCATCOALESCE.