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.

Carnielli Efrem: Programmazione a componenti<br />

Applicazioni Client-Server e database<br />

l’<strong>in</strong>terrogazione e raccolgono i dati risultanti, uso i dati ed <strong>in</strong>f<strong>in</strong>e rilascio la<br />

connessione. Ha senso usare un Prepared Statement per una connessione così<br />

rapida? E <strong>in</strong>oltre quando questi vengono <strong>in</strong>seriti nella connessione?<br />

La soluzione consiste nel creare connessioni per compiti specifici, qu<strong>in</strong><strong>di</strong> per una<br />

data tipologia <strong>di</strong> richieste, ad esempio connessioni solo per le richieste <strong>di</strong> dati (o<br />

solo per l’<strong>in</strong>serimento...), qu<strong>in</strong><strong>di</strong> la richiesta <strong>di</strong> connessione al pool dovrà prevedere<br />

anche l’<strong>in</strong>serimento <strong>di</strong> un parametro legato alla tipologia <strong>di</strong> connessione che<br />

desidero a seconda del motivo per cui voglio la connessione.<br />

Il pool <strong>di</strong> connessione è legato a log<strong>in</strong> e password. Ma chi si occupa <strong>di</strong> tutto?<br />

Per un utente che fa logon ad un DB gli si deve fare subito almeno una<br />

connessione, il pool non serve più!<br />

Da qui ho pr<strong>in</strong>cipalmente due problemi, il primo è che una connessione per ogni<br />

utente è troppo (il numero degli utenti è generalmente elevato), mentre potrei<br />

usare un pool che ne gestisce solo un numero sufficiente.<br />

Il secondo è che nel DB gestisco i dati, <strong>in</strong> un’applicazione funzionalità operative,<br />

l’utente è l’attore che usa dei casi d’uso. Se la logica <strong>di</strong> sicurezza dei dati è relegata<br />

al gestore del DB io non posso creare niente <strong>di</strong> sicurezza applicativa, ma ho solo<br />

sicurezza dei dati.<br />

Ad esempio non basta assicurare che lo studente che compila il test non possa<br />

crearlo.<br />

La soluzione è che l’applicazione <strong>di</strong>venta un utente del DB, si crea un pool <strong>di</strong><br />

connessione e per ogni connessione crea log<strong>in</strong> e password: <strong>in</strong> questo caso avrò un<br />

unico utente per ogni applicazione. I vari utenti dell’applicazione sono gestiti<br />

dall’applicazione come attori <strong>di</strong>versi.<br />

Log<strong>in</strong> e password nell’applicativo, da qualche parte ci sarà una sequenza <strong>di</strong> co<strong>di</strong>ce<br />

dove ci sarà: createConnection createConnection createConnection (l,p).<br />

(l,p).<br />

Ho tipologie <strong>di</strong>verse <strong>di</strong> connessioni assegnate a <strong>di</strong>versi utenti.<br />

Lo sviluppatore non può gestire le credenziali <strong>di</strong> accesso al DB.<br />

Lo sviluppatore <strong>in</strong> buona o cattiva fede può danneggiare o tenere <strong>in</strong>formazioni<br />

critiche dal DB per cui sta facendo l’applicazione.<br />

Deve essere il responsabile applicativo della base <strong>di</strong> dati che ha la responsabilità <strong>di</strong><br />

controllare che al db vengano fatte richieste consentite.<br />

Lo sviluppatore però potrebbe fare quello che vuole perchè basta che faccia la<br />

connessione <strong>di</strong> tipo “mo<strong>di</strong>fica” per danneggiare il DB.<br />

Qui <strong>in</strong>terviene la responsabilità del team <strong>di</strong> autoregolarsi al suo <strong>in</strong>terno.<br />

Bisognerebbe fare <strong>in</strong> modo che lo sviluppatore che sviluppa un dato caso d’uso<br />

non possa accedere a dati che non hanno <strong>in</strong>erenza con quello che devo fare.<br />

Il pool <strong>di</strong> connessione deve capire chi è l’attore che richiede la connessione.<br />

Ci devono essere i responsabili che decidono cosa un ruolo può fare o no. Si tratta<br />

<strong>di</strong> sicurezza applicativa <strong>di</strong> primo livello.<br />

Se lo sviluppatore svolge il caso d’uso “compila questionario” è il meccanismo <strong>di</strong><br />

152

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

Saved successfully!

Ooh no, something went wrong!