Bonjour,

J'ai un petit soucis. Dans le cadre d'un suivi de modification des données par un utilisateur, on s'est appuyé sur "exectue as" et revert ainsi que sur "SELECT CURRENT_USER".

Aussi, on s'est rendu compte que lorsqu'une requête se mange un timeout le revert n'est pas fait. Ce qui fait que lors d'une exécution ultérieure "SELECT CURRENT_USER" ne nous retourne pas le bon utilisateur mais celui du dernier contexte non rendu.

Aussi, sauriez-vous par hasard comment faire pour être certain de libérer le contexte quel que soit l'issu de la requête.

A titre d'exemple voici ce que j'ai tenté qui ne marche pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
DECLARE @currentSqlUser VARCHAR(128) 
SET @currentSqlUser = (SELECT CURRENT_USER )
DECLARE @initialSqlUser VARCHAR(128) 
SET @initialSqlUser = @currentSqlUser 
 
IF((SELECT COUNT(*) FROM sysusers WHERE  name = 'user_X') > 0)
BEGIN   
SET @currentSqlUser = (SELECT 'user_X') 
END 
 
BEGIN TRY  
EXECUTE AS USER = @currentSqlUser; 
SELECT * FROM ma_table
REVERT 
END TRY
BEGIN CATCH
IF @initialSqlUser != (SELECT CURRENT_USER) 
REVERT
END CATCH