Nous avons une application Web qui utilise l'authentification par formulaire pour authentifier un utilisateur en fonction d'une table utilisateur dans la base de données. (Par exemple, aucun répertoire actif ou compte d'utilisateur du serveur SQL n'est impliqué ici). L'application Web accède au serveur SQL à l'aide d'un compte de service. Cependant, à des fins d'audit, d'autorisation et à d'autres fins, nos procédures stockées doivent savoir pour quel utilisateur une opération donnée est en cours d'exécution.Comment transmettre des données hors-bande (ID utilisateur actuel) à SQL Server 2008
Dans une vie antérieure, j'ai travaillé avec une situation similaire en utilisant une base de données Oracle. Dans ce scénario, chaque fois que nous avons ouvert une connexion, nous avons d'abord appelé une procédure de génération Oracle pour définir une variable de contexte de portée de connexion. Cette variable contenait l'ID utilisateur de l'utilisateur qui utiliserait la connexion. Ensuite, toutes les procédures stockées qui ont besoin de connaître l'utilisateur actuel vérifieraient la variable de contexte. D'un point de vue conceptuel, cela ressemblait beaucoup à pousser les informations d'utilisateur sur le CallContext avant de passer un appel à distance.
Ma question est, existe-t-il un mécanisme similaire dans Microsoft SQL Server? Obvioulsy, si je dois, je peux passer l'UserId comme argument à chaque procédure stockée, mais c'est exactement ce que j'essaie d'éviter.