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
Partager