CURRENT_DATABASE et CURRENT_SCHEMA : assurer des sorties déterministes avec des politiques, des vues et des UDFs

Attention

Ce changement de comportement est présent dans le bundle 2023_08.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Le comportement des fonctions CURRENT_DATABASE et CURRENT_SCHEMA est le suivant :

Avant la modification

Les valeurs de retour lors de l’appel de la fonction CURRENT_DATABASE ou CURRENT_SCHEMA ne sont pas déterministes :

Lorsque vous appelez la fonction à l’intérieur d’une politique d’accès aux données, telle qu’une politique de masquage ou d’accès aux rangées, les fonctions renvoient l’une des deux valeurs suivantes :

  • La base de données ou le schéma qui contient la politique.

  • La base de données ou le schéma utilisé dans la session.

Lorsque vous appelez la fonction dans la définition d’une vue ou d’un site UDF et que le mot-clé SELECT ne précède pas la fonction, celle-ci renvoie l’une des deux valeurs suivantes :

  • La base de données ou le schéma utilisé dans la session.

  • La base de données ou le schéma qui contient le site UDF ou la vue.

Après la modification

Les valeurs de retour lors de l’appel de la fonction CURRENT_DATABASE ou CURRENT_SCHEMA sont déterministes :

  • Lorsque vous appelez la fonction à l’intérieur d’une politique d’accès aux données, telle qu’une politique de masquage ou d’accès aux lignes, les fonctions renvoient la base de données ou le schéma qui contient la table ou la vue protégée.

  • Lorsque vous appelez la fonction dans la définition d’une vue ou d’un site UDF, la fonction renvoie la base de données ou le schéma qui contient le site UDF ou la vue.

Pour minimiser l’impact de ces changements, procédez comme suit :

  • Si votre définition de vue ou UDF utilise l’une de ces fonctions et que le mot-clé SELECT ne précède pas la fonction, vérifiez à nouveau que la définition UDF correspond bien à la manière dont la fonction doit être utilisée.

  • Si votre politique fait appel à l’une de ces fonctions, vérifiez que le corps de la politique est écrit pour la base de données ou le schéma qui contient la table protégée et non pour la base de données ou le schéma utilisé pour la session.

Réf : 1337