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