Sql Server 2005 Trigger accesso MSACCESS.EXE

mercoledì 17 marzo 2010 - 10.57

fgiusti Profilo | Newbie

Ciao scusate è la prima volta che mi trovo qui e vi chiedo aiuto...
Allora ho un problema di sicurezza e non conosco bene SQL SERVER 2005, c'è qualcuno che mi accede al DB con MSACCESS.EXE e mi aggiorna un campo di una tabella, come faccio a fare una procedura o trigger che mi controlla se questo campo viene aggiornato e mi logga dentro un altra tabella chi è stato, il giorno, il dato nuovo e quello vecchio e anche il nome del terminale???

Io uso di più oracle e li non avrei problemi, pero con SQL SERVER ne ho...

Ciao A tutti e grazie...

lbenaglia Profilo | Guru

>Allora ho un problema di sicurezza e non conosco bene SQL SERVER
>2005, c'è qualcuno che mi accede al DB con MSACCESS.EXE e mi
>aggiorna un campo di una tabella, come faccio a fare una procedura
>o trigger che mi controlla se questo campo viene aggiornato e
>mi logga dentro un altra tabella chi è stato, il giorno, il dato
>nuovo e quello vecchio e anche il nome del terminale???

Ciao Fabio,

Puoi prendere spunto dal seguente thread:
http://community.ugiss.org/forums/p/920/2668.aspx

>Ciao A tutti e grazie...
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

fgiusti Profilo | Newbie

GRAZIE TANTE, quello che cercavo... ora vediamo se becco chi è e poi....................
scusa ma per prendere il vecchio valore e anche quello nuovo??

lbenaglia Profilo | Guru

>scusa ma per prendere il vecchio valore e anche quello nuovo??
Devi modificare il trigger di UPDATE eseguendo una JOIN tra le tabelle virtuali INSERTED (nuovo valore) e DELETED (vecchio valore).

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

fgiusti Profilo | Newbie

scusa ma posso anche fare cosi?

DECLARE @LastNamePrima NVARCHAR(20)
DECLARE @LastNameDopo NVARCHAR(20)

SELECT @LastNamePrima = LastName FROM deleted
SELECT @LastNameDopo= LastName FROM inserted

e poi faccio la insert nella tabella passando nella VALUES (@LastNamePrima,@LastNameDopo)??

lbenaglia Profilo | Guru

>scusa ma posso anche fare cosi?
No, in quanto se modifichi più di una riga alla volta andresti a considerare solo l'ultima riga modificata.
Devi fare una banalissima INNER JOIN tra le due tabelle virtuali.
In SQL Server un after trigger scatta 1 volta sola per transazione, non per ogni riga coinvolta dalla transazione.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5