Empêcher l'exécution d'une requête si un paramètre spécifique n'est pas présent dans T-SQL

En utilisant T-SQL et Microsoft SQL Server 2014 , j'essaye de find un moyen de restreindre l'access à une table si un paramètre spécifique n'est pas présent.

Je peux le faire sur SQL Server 2016 en créant une fonction qui utilise la fonction SESSION_CONTEXT() , puis en l'appliquant à mon schéma.

Comme je n'ai pas access à SESSION_CONTEXT() dans SQL Server 2014, je ne parviens pas à get la valeur de la key spécifiée dans le context de session en cours.

Quelqu'un peut-il suggérer une solution qui me permettrait de contourner l'utilisation de SESSION_CONTEXT () pour ce scénario (ou suggérer une meilleure solution)

Compatible SQL Server 2016 T-SQL

 CREATE SCHEMA RessortingctSchema GO CREATE FUNCTION RessortingctSchema.DenyWithoutParameter (@Parameter INT) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS VALID_PARAMETER_SUPPLIED WHERE @Parameter = CAST(SESSION_CONTEXT(N'@Parameter') AS INT) GO CREATE SECURITY POLICY RessortingctSchema.ScehmaParameterRequirementForTableX ADD FILTER PREDICATE RessortingctSchema.DenyWithoutParameter (@Parameter) ON dbo.TableX ,ADD BLOCK PREDICATE RessortingctSchema.DenyWithoutParameter (@Parameter) ON dbo.TableX GO 

Créez une table dans le schéma RessortingctSchema ,

  • ID de session
  • ParameterKey
  • ParameterValue
  • Temps de vivre

Ajoutez-y une input pour chaque session / connection si nécessaire, puis réécrivez RessortingctSchema.DenyWithoutParameter pour sélectionner à partir de là, et de time en time, collectez datatables.