Bonjour,
J'aimerais mettre en place un audit d'accès à des données d'un serveur SQL Server 2012. Mon besoin et qu'une table soit remplie d'une ligne d'audit à chaque fois qu'un utilisateur exécute une vue.
Je tente de passer par une procédure stockée qui contient le SELECT de la vue ainsi qu'un INSERT dans la table d'audit. Je bloque à créer la vue qui exécute cette procédure stockée.
J'ai trouvé la source de l'erreur je suppose sur ce site. L'OPENQUERY semble faire un rollback.
Ci-dessous un code de test, [SELF] est un serveur lié qui pointe sur localhost. La première exécution insert bien une ligne dans la table d'audit mais pas quand je l'appelle par OPENQUERY. J'ai aussi essayé OPENROWSET, Utiliser OLEDB en place du client natif, ... rien n'y fait. Je suis prenneur si vous avez des idées.
Merci
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
21
22
23
24
25
26
27
28
29
30
31 create table dbo.stored_procedure_log ( sp_schema varchar(255), sp_name varchar(255), sp_user varchar(255), start_time datetime, duration int default 0 ); go create procedure sp_dummy as begin select 1 as col1, 2 as col2; insert into dbo.stored_procedure_log(sp_schema,sp_name,sp_user,start_time) values ('dbo','dummy','toto',getdate()); end; go exec sp_dummy; -- On vérifie qu'une ligne d'audit a bien été mise select * from dbo.stored_procedure_log; select * from OPENQUERY([SELF], ' exec master.dbo.sp_dummy; '); -- La ligne d'audit n'a pas été insérée select * from dbo.stored_procedure_log;
Partager