15.06.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!