Opinione su apertura chiusura connessione a sql

venerdì 15 luglio 2011 - 15.37

stez Profilo | Newbie

Ciao a tutti,
vi chiedo la vostra opinione riguardo il 'quando' aprire la connessione a sql... voi l'aprite all'apertura dei vostri software "globale" e la chiudete alla chiusura o ogni volta che dovete fare una query, aprite->eseguite-> chiudete? oppure aprite ad ogni apertura di un form, fillate le combo/altro e poi chiudete?
ovviamente se devo fare 3 query "di fila" apro -> eseguo eseguo eseguo -> chiudo e se ho un "task" aperto che si attiva con un timer ogni tanto apro->eseguo->chiudo senza lasciare la connessione lì aperta a fare nulla...

ma in generale, secondo voi, qual'è la soluzione migliore?

altra domanda
io attualmente ho il mio utente sa con tutti i privilegi e creo su sql l'utente pippo che può vedere solo i db/tabelle/stored etc etc che gli servono... se il software (fatto in .net) è installato su 50 pc, tutti i pc si collegano con la classica stringa all'istanza sql con utente pippo
avrebbe senso/qualche vantaggio creare n(50) utenti uguali a pippo sull'istanza sql e passare computer per computer a modificare la stringa di connessione al db del programma per fargli usare il suo utente sql "univoco" invece di pippo?

grazie
ciao

lbenaglia Profilo | Guru

>ma in generale, secondo voi, qual'è la soluzione migliore?
La soluzione migliore per garantire la massima scalabilità consiste nell'aprire la connessione il più tardi possibile, eseguire la query (una) e chiuderla subito dopo.

>io attualmente ho il mio utente sa con tutti i privilegi e creo
>su sql l'utente pippo che può vedere solo i db/tabelle/stored
>etc etc che gli servono... se il software (fatto in .net) è installato
>su 50 pc, tutti i pc si collegano con la classica stringa all'istanza
>sql con utente pippo
>avrebbe senso/qualche vantaggio creare n(50) utenti uguali a
>pippo sull'istanza sql e passare computer per computer a modificare
>la stringa di connessione al db del programma per fargli usare
>il suo utente sql "univoco" invece di pippo?
Il vantaggio sta nel fatto che ogni singola login potrebbe avere permission personalizzate e saresti in grado di tenere traccia di tutti gli accessi. Se non è questo il caso, puoi utilizzare una login comune.

>grazie
Prego.

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

alx_81 Profilo | Guru

Ciao, volevo aggiungere un post che a mio avviso può esserti utile per capire come gestire le connessioni dall'applicazione

>>ma in generale, secondo voi, qual'è la soluzione migliore?
>La soluzione migliore per garantire la massima scalabilità consiste
>nell'aprire la connessione il più tardi possibile, eseguire la
>query (una) e chiuderla subito dopo.
Quoto Lorenzo e aggiungo questo post, ricordandoti che comunque ogni connessione viene presa da un apposito pool che ricicla al suo interno le connessioni stesse, ottimizzandone la gestione:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=38489

>>io attualmente ho il mio utente sa con tutti i privilegi e creo
>>su sql l'utente pippo che può vedere solo i db/tabelle/stored
>>etc etc che gli servono... se il software (fatto in .net) è installato
>>su 50 pc, tutti i pc si collegano con la classica stringa all'istanza
>>sql con utente pippo
>>avrebbe senso/qualche vantaggio creare n(50) utenti uguali a
>>pippo sull'istanza sql e passare computer per computer a modificare
>>la stringa di connessione al db del programma per fargli usare
>>il suo utente sql "univoco" invece di pippo?
>Il vantaggio sta nel fatto che ogni singola login potrebbe avere
>permission personalizzate e saresti in grado di tenere traccia
>di tutti gli accessi. Se non è questo il caso, puoi utilizzare
>una login comune.
Aggiungo anche che se i tuoi pc sono sotto lo stesso dominio del sql server o sotto un dominio trustato dal sql server, potresti pensare ad un gruppo windows fatto sul domain controller, per dare accesso ad ogni utente WINDOWS verso l'applicazione (autenticando di fatto l'utente tramite il gruppo). In questo modo ogni utente avrebbe il suo "single sign on" che corrisponde a quello della macchina e sarebbe, di conseguenza, più tracciabile (anche se devi scrivere chi ha fatto cosa da qualche parte ad esempio).

Ciao!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

stez Profilo | Newbie

capito grazie, lo scenario è più semplice e non ci sono domini etc etc
ma c'è un posto dove posso vedere quali connessioni sono aperte verso l'istanza? sql 2005 express

con 50 login sarebbe più ordinato ma ho lo svantaggio che un nuovo grant deve essere applicato a tutti gli utenti (ma quello lo faccio con qualche riga di codice senza troppi problemi)
altri vantaggi\svantaggi legati alle prestazioni? come spazio occupato in mb del db immagino che l'incremento sia risibile no?

alx_81 Profilo | Guru

>ma c'è un posto dove posso vedere quali connessioni sono aperte
>verso l'istanza? sql 2005 express
c'è una vista di sistema chiamata sys.dm_exec_sessions

>con 50 login sarebbe più ordinato ma ho lo svantaggio che un
>nuovo grant deve essere applicato a tutti gli utenti (ma quello
>lo faccio con qualche riga di codice senza troppi problemi)
>altri vantaggi\svantaggi legati alle prestazioni? come spazio
>occupato in mb del db immagino che l'incremento sia risibile no?
direi che problemi di spazio e prestazioni non esistono in questo

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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