Execute As/Revert et timeout
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:
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 |