Domanda

Poiché non implementiamo gli utenti delle nostre applicazioni come utenti nel server SQL, quando il server delle applicazioni si collega a un database ogni applicazione utilizza sempre le stesse credenziali per collegarsi a ciascun database.

Ciò presenta un problema di controllo. Utilizzando i trigger, vogliamo archiviare ogni aggiornamento, inserire, eliminare e attribuire ciascuno a un determinato utente. Una possibile soluzione è quella di aggiungere un "aggiornato dall'utente" colonna per ogni tabella e aggiornalo ogni volta. Ciò significa una nuova colonna su ogni tabella e un nuovo parametro su ogni procedura memorizzata. Significa anche che puoi fare solo eliminazioni soft.

Invece, propongo di utilizzare la proprietà Nome applicazione della stringa di connessione e di leggerla con la proprietà App_Name () all'interno del trigger. L'ho provato con un'app semplice e sembra funzionare (il formato potrebbe essere il seguente: App = MyApp | Utente = 100).

La domanda per voi ragazzi è: è una cattiva idea e ne avete una migliore?

È stato utile?

Soluzione

Uso SET CONTEXT_INFO per questo. È proprio quello di cui hai bisogno.

Altri suggerimenti

Sembra certamente una soluzione fattibile, anche se dovrai caricare il nome utente nella stringa di connessione ogni volta che l'applicazione viene caricata. Si noti che questa soluzione probabilmente non funzionerebbe con un'applicazione Web, poiché la stringa di connessione sarà ogni volta diversa, il che potrebbe portare a enormi problemi di pool di connessioni.

Un'altra opzione è quella di recuperare il nome host / indirizzo IP (SELECT host_name ()) e archiviarlo invece.

Non è necessario necessariamente un nuovo parametro su ogni procedura memorizzata, in quanto è possibile modificare ogni procedura memorizzata (o il trigger) per inserire automaticamente il nome app / nome host.

Un potenziale svantaggio è che qualsiasi modifica apportata tramite Management Studio non avrà l'app_Name personalizzato e ti verrà lasciato " Microsoft Management Studio " come utente.

Usiamo la proprietà Nome applicazione per controllare i trigger di controllo e non abbiamo riscontrato alcun problema durante l'utilizzo e non abbiamo notato alcun problema di velocità (anche se nel nostro caso, non stiamo verificando specificamente per determinate applicazioni, quindi è difficile misura quanto tempo impieghi a non fare qualcosa :))

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top