Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
6.9 Connessione al Database Server con<br />
protezione della password<br />
Carnielli Efrem: Programmazione a componenti<br />
Applicazioni Client-Server e database<br />
Nel paragrafo precedente abbiamo riscontrato il problema della visibilità della<br />
password <strong>in</strong> un sistema che accede ad un database server.<br />
Una soluzione efficiente potrebbe essere quella <strong>di</strong> far gestire la creazione della<br />
connessione al database a un metodo predef<strong>in</strong>ito.<br />
Ve<strong>di</strong>amo un esempio <strong>di</strong> come potrebbe essere la creazione <strong>di</strong> una connessione da<br />
parte <strong>di</strong> un co<strong>di</strong>ce sorgente:<br />
miaConnessioneDiEsempio miaConnessioneDiEsempio miaConnessioneDiEsempio = = GestoreDB.getConnessione();<br />
GestoreDB.getConnessione();<br />
GestoreDB.getConnessione();<br />
Questo metodo si troverà <strong>in</strong> un package che detiene le <strong>in</strong>formazioni legate alla<br />
sicurezza e la classe GestoreDB sarà realizzata da una persona che si occuperà dei<br />
problemi derivati.<br />
Così facendo si ottiene una trasparenza sul meccanismo dei permessi per l’accesso<br />
al database e una sicurezza per gli errori derivanti dall’accesso da parte <strong>di</strong> persone<br />
<strong>in</strong> buona e <strong>in</strong> cattiva fede.<br />
Viene <strong>in</strong>trodotta una complicazione determ<strong>in</strong>ata dal fatto che il metodo<br />
getConnessione() deve conoscere l’identità <strong>di</strong> chi sta richiedendo la connessione. Il<br />
problema potrebbe essere risolto tramite il passaggio <strong>di</strong> un parametro speciale, per<br />
esempio una chiave che identifichi univocamente il richiedente. Oppure potrebbe<br />
essere risolto tramite una tecnica più raff<strong>in</strong>ata che utilizza le eccezioni.<br />
All’<strong>in</strong>terno <strong>di</strong> un metodo esiste la possibilità <strong>di</strong> conoscere chi lo ha chiamato<br />
utilizzando i record <strong>di</strong> attivazione e lo stack (ne abbiamo parlato nelle lezioni<br />
precedenti). In Java questo avviene tramite una generazione <strong>di</strong> eccezione, che<br />
permette <strong>di</strong> identificare chi ha chiamato il metodo, utilizzando lo stack trace.<br />
Questa tecnica potrebbe sembrare un trucco, ma dobbiamo tenere ben presente<br />
l’obiettivo e che, comunque, è una funzionalità fornita dal l<strong>in</strong>guaggio <strong>di</strong><br />
programmazione.<br />
6.9.1 Pool <strong>di</strong> connessioni<br />
Il pool <strong>di</strong> connessione è un <strong>in</strong>sieme <strong>di</strong> connessioni, a cui è associato un gestore.<br />
Tale gestore a seconda delle richieste pervenute può assegnare una delle<br />
connessioni presenti nel pool oppure crearne <strong>di</strong> nuove a seconda dell’esigenza. Se<br />
si restituisce la connessione il gestore la raccoglie e la rende <strong>di</strong>sponibile per le<br />
prossime richieste.<br />
Come vengono trattati i Prepared Statement che sono collegati alla connessione?<br />
Consideriamo il caso <strong>in</strong> cui effettuo una ricerca: nel momento <strong>in</strong> cui premo il<br />
pulsante “trova” si chiede la connessione al pool <strong>di</strong> connessioni, si effettua<br />
151