Introduzione 
 
2
1.1.2. Vincoli 
I suddetti obiettivi vogliono essere perseguiti tenendo in debita considerazione alcuni 
vincoli: 
 ξ  uso di strumenti standard: l’utilizzo di tecnologie standard e diffuse semplifica il 
lavoro dello sviluppatore, sia in fase di progetto che in caso di successive 
modifiche; inoltre agevola l’integrazione con altre applicazioni; 
 ξ  riusabilità: realizzando un sistema facilmente adattabile a casi applicativi diversi, si 
fornisce al lavoro un notevole valore aggiunto; 
 ξ  accessibilità: si vuole realizzare un’applicazione server che sia utilizzabile con 
semplicità da una gamma di utenti la più ampia possibile, che cioè non richieda dal 
lato client la disponibilità di strumenti poco diffusi; 
 ξ  performance: quanto detto vuole essere realizzato contenendo le risorse utilizzate, 
sia in termini di banda di trasmissione che di tempo di elaborazione. 
 
 
Introduzione 
 
3
1.2. La soluzione proposta 
 
1.2.1.  L’architettura del sistema 
L’architettura del sistema è rappresentata in figura 1.1 ed è di tipo multi-tier, ossia può 
essere realizzata inserendo un middle-tier, o strato intermedio, che consenta di accedere 
alla base di dati, autenticando l’utente, verificandone i diritti di accesso e gestendo poi la 
comunicazione vera e propria. Tale componente non deve necessariamente trovarsi sulla 
stessa macchina del database, ma, in generale, può essere situato su un qualunque 
computer della rete.  
Lo strato intermedio è stato quindi suddiviso in due parti: una per gestire l’autenticazione 
dell’utente, l’altra per accedere alla base di dati, estrarne le informazioni ed inviarle 
all’utente. La prima parte quindi rappresenta il client della seconda. 
Questa tesi si concentra nella realizzazione della seconda parte, sviluppata 
implementando un Web Service, che mette a disposizione gli strumenti per accedere alla 
base di dati in modo sicuro, estrarne le informazioni richieste dall’utente e conservare la 
segretezza dei dati mediante cifratura. 
 
Figura 1.1 - L’architettura multi-tier del sistema 
 
Utente finale 
 
Authentication
Server 
DBXML4U
Server 
middle-tier 
Base di dati 
Introduzione 
 
4
L’applicazione client si occupa dell’interfaccia con l’utente finale e della sua 
autenticazione, per cui tra gli obiettivi secondari di questa tesi si considera anche 
l’integrazione con componenti preesistenti, finalizzata ad una riduzione dei costi di 
mantenimento.  
L’applicazione client è stata sviluppata in un lavoro parallelo, ma è bene precisare che 
non deve essere obbligatoriamente questa: la nostra applicazione è stata creata per 
essere utilizzata da una qualunque altra applicazione che voglia permettere agli utenti di 
accedere alle informazioni contenute in una base di dati, offrendo la massima riusabilità. 
Inoltre è stato sviluppato uno strato di accesso multilivello alla base di dati, che consiste 
nella realizzazione di una seconda base di dati per la gestione dei diritti degli utenti, 
permettendo la creazione di diversi profili, corrispondenti a differenti diritti di accesso al 
sistema. 
 
 
1.2.2. La scelta degli strumenti 
Come anticipato, nella scelta degli strumenti per l’implementazione del sistema si è 
cercato di utilizzare tecnologie il più possibile standard.  
Le basi di dati sono state create mediante MySQL, un solido, sofisticato, potente, veloce e 
robusto DBMS relazionale, fornito di una documentazione completa e continuamente 
aggiornata. MySQL è un database relazionale client/server e multi threaded, il che 
significa che può gestire richieste multiple degli utenti, tenendole indipendenti le une dalle 
altre, sfruttando le capacità del sistema operativo. 
Per far comunicare tra loro i vari livelli dell’architettura si è scelto di utilizzare SOAP 
(Simple Object Access Protocol), un semplice e leggero protocollo applicativo che 
fornisce un metodo consistente e strutturato di trasporto dei dati e di chiamata di 
procedure fra applicazioni distribuite. SOAP inoltre basa il suo funzionamento su 
tecnologie preesistenti e ben collaudate, senza introdurne di nuove: in particolare viene 
sfruttato HTTP (HyperText Markup Language) per il trasporto dei dati e XML (eXtensible 
Markup Language) per la loro serializzazione, permettendo così di transitare attraverso i 
firewall aziendali. Lo standard SOAP è poi indipendente dalla piattaforma e, in realtà, 
anche dal protocollo di trasporto: infatti è teoricamente possibile effettuare la richiesta e 
ricevere la risposta utilizzando qualsiasi protocollo che supporti informazioni testuali. 
Introduzione 
 
5
Si desidera anche una certa esportabilità dei dati estratti dalla base di dati, in modo che 
qualsiasi sistema possa utilizzare tali dati. Per questo è stato scelto il linguaggio XML, 
grazie ai suoi indubbi punti di forza: XML si basa su testo ASCII, un formato diffuso da 
moltissimi anni in ogni settore; XML è compatto, perché si limita ad essere un contenitore 
di dati, senza le aggiunte legate all’elaborazione tipiche dei formati dei database 
proprietari. 
XML è quindi stato sfruttato direttamente per la codifica dei risultati delle query: quello che 
la nostra applicazione fornisce in risposta è, infatti, un documento XML, corredato da un 
foglio di stile XSL per l’eventuale formattazione dei dati. 
Quanto al linguaggio implementativo, la scelta di Java appare, per svariati motivi, quasi 
obbligata: Java, infatti, nasce proprio per fornire uno strumento di programmazione 
esportabile, ad esempio tramite Internet, e tale da permettere l’esecuzione di 
un’applicazione su qualsiasi sistema dotato semplicemente di una Java Virtual Machine. 
Per poter lavorare con le base di dati è stato usato JDBC, un’API che consente al 
programmatore di inviare query ad una base di dati relazionale, di effettuare delete o 
update dei dati all’interno di tabelle, o di ottenere meta-informazioni relativamente alle 
basi di dati. JDBC è molto flessibile, anche grazie al fatto che è stato progettato 
basandosi sul concetto di interfaccia e non di oggetto: tutte le operazioni necessarie per 
accedere ai dati vengono fatte attraverso i metodi esposti da interfacce e non occorre 
istanziare alcun oggetto. È importante sottolineare che JDBC è un’interfaccia a oggetti per 
l’esecuzione di comandi SQL e quindi il vero medium per la comunicazione con la base di 
dati rimane il linguaggio SQL.  
Java inoltre fornisce uno strumento molto utile per la realizzazione di documenti XML: 
l’API JDOM, ossia uno strumento simile al DOM ma più semplice e potente, indirizzata 
proprio alla manipolazione di documenti XML. 
La scelta di Java come linguaggio di programmazione indirizza infine la scelta degli 
strumenti crittografici verso la JCE (Java Cryptography Extension), API presente 
nell’ambiente run-time standard di Java, che fornisce un supporto collaudato ed affidabile 
alle più importanti funzioni di sicurezza.  
 
Introduzione 
 
6
1.3. I capitoli della tesi 
La tesi è suddivisa in diversi capitoli, atti all’illustrazione delle metodologie di sviluppo 
utilizzate ed alla descrizione dell’architettura di sistema realizzata, fino ai dettagli 
dell’implementazione software del lavoro. 
Capitolo 2. Basi di dati: teoria delle basi di dati e loro utilizzo mediante Java; 
Capitolo 3. Accesso multilivello alle basi di dati: dettagli del sistema di accesso 
multilivello per la gestione dei diritti degli utenti; 
Capitolo 4. Sicurezza e crittografia: panoramica sui concetti di sicurezza e sugli 
algoritmi crittografici e loro implementazione con strumenti Java; 
Capitolo 5. XML e XSL: esposizione dei fondamenti dei due linguaggi, esempi ed 
applicazioni tramite Java; 
Capitolo 6. SOAP: descrizione del protocollo e suo utilizzo; 
Capitolo 7. Architettura del sistema: dettagli implementativi dell’architettura di 
sistema, simulazione e risultati; 
Capitolo 8. Il software: panoramica sulle classi Java sviluppate, descrizione ed 
installazione del software; 
Appendice. Documentazione del software: documentazione Javadoc in inglese; 
Bibliografia.  
Basi di dati 
 
7
2. Basi di dati 
 
 
2.1. Le basi di dati 
Ogni giorno nel mondo vengono scambiati volumi di dati molto elevati e quasi in ogni 
parte della terra le informazioni vengono prelevate, elaborate, trasformate, accresciute, 
aggiornate e infine ricostruite. Le basi di dati sono il centro vitale di questo movimento: 
permettono non solo di archiviare i dati e le informazioni raccolte nei vari campi dell’attività 
economica, scientifica, tecnologica, ma garantiscono anche la sicurezza e l’integrità dei 
dati medesimi, così come la possibilità di poterli recuperare in ogni momento nel modo più 
efficiente e rapido possibile. 
A mano a mano che l’informatica ha conquistato un ruolo fondamentale nei vari campi 
dell’attività umana, è emersa la necessità di avere dei sistemi capaci di gestire in modo 
avanzato i dati e le informazioni. I DataBase Management System (DBMS) sono la 
risposta più significativa a questa esigenza. Per DBMS si intende un sistema costituito 
essenzialmente dalla base di dati vera e propria e, soprattutto, dal software per gestire 
tutte le operazioni che ordinariamente si fanno su una base di dati, dall’archiviazione 
all’aggiornamento, fino al backup e al mirroring. 
Risale agli inizi degli anni Ottanta la comparsa sul mercato software dei primi DBMS. 
Pioniere nel campo della ricerca orientata alle basi di dati è stata la IBM che, prima 
ancora di altri grandi database vendor come Oracle e Informix, si trovò ad affrontare la 
necessità di fornire sui propri sistemi mainframe, allora già largamente diffusi, del software 
capace di gestire efficacemente l’archiviazione dei dati. In origine tali sistemi usavano il 
file system del sistema operativo che li ospitava come unità di immagazzinamento per le 
basi di dati. Così la ricerca si orientò allo studio di un metodo di organizzazione e 
strutturazione dello spazio nei file per un’archiviazione ottimale ed un accesso efficiente ai 
dati. Il concetto di tabella divenne popolare agli inizi degli anni Settanta grazie a E. Codd, 
un ricercatore di IBM, che gettò le basi di un approccio teorico ancora oggi largamente 
utilizzato in questo settore. Con la comparsa di nuovi protagonisti nel campo della ricerca 
e dello sviluppo delle basi di dati, sorse l’esigenza di avere un linguaggio comune per 
l’accesso ai dati, in quanto ognuno di loro disponeva di uno standard proprietario. Anche 
Basi di dati 
 
8
in questo la IBM fu la protagonista principale, ed infatti finì per diffondersi un suo 
linguaggio chiamato SQL (Structured Query Language) oggi molto popolare: da allora non 
ha subito modifiche ma solo aggiunte. 
Un DBMS è sostanzialmente uno strato software che si frappone fra l’utente ed i dati veri 
e propri. Grazie a questo strato intermedio l’utente e le applicazioni non accedono ai dati 
così come sono memorizzati effettivamente, cioè alla loro rappresentazione fisica, ma ne 
vedono solamente una rappresentazione logica. Ciò permette un elevato grado di 
indipendenza fra le applicazioni e la memorizzazione fisica dei dati.  
Un DBMS si articola su tre livelli di astrazione, detti rispettivamente esterno, logico e 
interno: 
 ξ  Livello esterno: costituisce la descrizione di una porzione della base di dati, che si 
ottiene servendosi delle procedure specializzate per i diversi utenti (ad esempio la 
creazione temporanea di tabelle attraverso delle interrogazioni alla base di dati). 
Gli accessi ad una base di dati da parte degli utenti possono avvenire solo 
attraverso tale livello. 
 ξ  Livello logico: costituisce la descrizione dell’intera base di dati per mezzo della 
rappresentazione logica dei dati adottata dal DBMS, prescindendo dalla struttura 
fisica degli archivi.  
 ξ  Livello interno: costituisce la rappresentazione della struttura della base di dati in 
termini delle strutture fisiche di memorizzazione (il tipo di file utilizzato per salvare 
la base di dati). 
L’architettura del DBMS così definita assicura l’indipendenza dei dati, che è la principale 
proprietà del DBMS: questa proprietà garantisce che gli utenti ed i programmi applicativi 
che utilizzano una base di dati possano interagire ad un elevato livello di astrazione, che 
prescinde dai dettagli realizzativi utilizzati nella costruzione della base di dati. Tale 
indipendenza si attua attraverso due livelli: 
 ξ  Indipendenza fisica: consente di interagire con il DBMS in modo indipendente 
dalla struttura fisica dei dati. 
 ξ  Indipendenza logica: consente di interagire con il livello esterno della base di dati 
in modo indipendente dal livello logico. 
Basi di dati 
 
9
Le funzionalità principali che devono caratterizzare un DBMS sono quelle di: 
 ξ  consentire l’accesso ai dati attraverso il livello esterno, invece che attraverso il 
livello interno; 
 ξ  permettere la condivisione e l’integrazione dei dati fra applicazioni differenti; 
 ξ  controllare l’accesso concorrente ai dati; 
 ξ  assicurare la sicurezza e l’integrità dei dati. 
Grazie a questi aspetti le applicazioni che vengono sviluppate possono contare su una 
sorgente dati sicura, affidabile e generalmente scalabile. Tali proprietà sono auspicabili 
per applicazioni che usano la rete Internet come infrastruttura e che hanno quindi evidenti 
problemi di sicurezza e scalabilità. 
Come qualsiasi software, anche una base di dati viene manipolata attraverso dei 
linguaggi specifici per basi di dati. Questi linguaggi si dividono in due categorie: 
 ξ  Data Definition Language (DDL): utilizzati per definire gli schemi logici, esterni e 
fisici. 
 ξ  Data Manipulation Language (DML): impiegati per le interrogazioni e 
l’aggiornamento delle istanze di basi di dati. 
Il linguaggio che è comunque maggiormente utilizzato per le basi di dati è l’SQL, che può 
essere usato sia come DDL sia come DML. 
La caratteristica principale secondo cui i DBMS vengono normalmente classificati è la 
rappresentazione logica dei dati che essi mostrano ai loro utilizzatori. Nel corso degli anni 
sono stati adottati numerosi modelli per l’espressione di tali dati, a fronte dei quali 
esistono quindi vari tipi di basi di dati. I tipi più comuni sono: 
 ξ  Basi di dati gerarchiche: i dati vengono organizzati in insiemi legati fra loro da 
relazioni di "possesso", in cui un insieme di dati può possedere altri insiemi di dati, 
ma un insieme può appartenere solo ad un altro insieme. La struttura risultante è 
un albero di insiemi di dati. 
 ξ  Basi di dati reticolari: il modello reticolare è molto simile a quello gerarchico, ed 
infatti nasce come estensione di quest’ultimo. Anche in questo modello insiemi di 
dati sono legati da relazioni di possesso, ma ogni insieme di dati può appartenere 
a uno o più insiemi. La struttura risultante è una rete di insiemi di dati. 
Basi di dati 
 
10
 ξ  Basi di dati relazionali: le basi di dati appartenenti a questa categoria si basano sul 
modello relazionale, la cui struttura principale è la relazione, ossia una tabella 
bidimensionale composta da righe e colonne. Ciascuna riga, che in terminologia 
relazionale viene chiamata tupla, rappresenta un’entità che si vuole memorizzare 
nella base di dati. Le caratteristiche di ciascuna entità sono definite invece dalle 
colonne delle relazioni, che vengono chiamate attributi. Entità con caratteristiche 
comuni, cioè descritte dallo stesso insieme di attributi, faranno parte della stessa 
relazione.  
 ξ  Basi di dati ad oggetti (object-oriented): lo schema di una base di dati ad oggetti è 
rappresentato da un insieme di classi, che definiscono le caratteristiche ed il 
comportamento degli oggetti che popoleranno la base di dati. La principale 
differenza con i modelli esaminati finora è la non passività dei dati: con una base 
di dati object-oriented, infatti, gli oggetti memorizzati nella base di dati contengono 
sia i dati che le operazioni possibili su di essi e non è quindi necessario 
demandare tali operazioni alle applicazioni che li utilizzano. 
I primi due tipi di basi di dati, quelli gerarchici e reticolari, quasi appartengono ormai alla 
storia dell’informatica. La maggior parte delle basi di dati attualmente utilizzate appartiene 
alla categoria delle basi di dati relazionali. I motivi di questo successo (anche 
commerciale) vanno ricercati nella rigorosità matematica e nella potenzialità espressiva 
del modello relazionale su cui si basano, nella sua semplicità di utilizzo e, ultima ma non 
meno importante, nella disponibilità di un linguaggio di interrogazione standard, l’SQL, 
che, almeno potenzialmente, permette di sviluppare applicazioni indipendenti dal 
particolare DBMS relazionale utilizzato. 
 
Basi di dati 
 
11
 
2.2. Il modello relazionale 
Le basi di dati relazionali sono il tipo di basi di dati attualmente più diffuso. I motivi di 
questo successo sono fondamentalmente due: 
1. forniscono sistemi semplici ed efficienti per rappresentare e manipolare i dati; 
2. si basano su un modello, quello relazionale, con solide basi teoriche. 
Il modello relazionale è stato proposto originariamente da Codd in un famoso articolo del 
1970. Grazie alla sua coerenza ed usabilità, il modello è diventato negli anni Ottanta 
quello più utilizzato per la produzione di DBMS. 
La struttura fondamentale del modello relazionale dei dati è appunto la relazione, che 
consente di organizzare i dati in insiemi di record a struttura fissa. Una relazione viene 
spesso rappresentata per mezzo di una tabella, le cui righe sono specifici record e le cui 
colonne corrispondono agli attributi dei record: l’ordine delle righe e delle colonne è 
sostanzialmente irrilevante. 
Una sola relazione può anche essere una base di dati, ma il più delle volte una base di 
dati è formata da molte relazioni che correlano tra di loro i propri dati in maniera da fornire 
un’informazione esaustiva. 
Ad esempio consideriamo due relazioni quali DOCENZA e MANIFESTO. Il nostro 
obiettivo è di rappresentare i dati relativi ai corsi universitari e ai loro docenti ed 
all’inserimento dei corsi nel manifesto degli studi. Quello che otteniamo è: 
DOCENZA 
Corso NomeDocente
Basi di Dati Rossi  
Elettronica Bianchi 
Telematica Verdi 
 
MANIFESTO 
Corso Anno 
Basi di Dati 4 
Elettronica 3 
Telematica 5 
 
Nel momento in cui ci occupiamo di utilizzare il modello relazionale, dobbiamo innanzitutto 
dichiararlo preventivamente e quindi impostarlo in maniera corretta. Ci vengono in questo 
caso in aiuto due elementi: schema ed istanza. 
Basi di dati 
 
12
Lo schema di una relazione (sostanzialmente invariato nel tempo) è costituito da una sua 
intestazione, vale a dire dal nome della relazione seguito dai nomi dei suoi attributi. Se ad 
esempio consideriamo la tabella DOCENZA (da notare come ora tabella e relazione 
diventino sinonimi) il suo schema sarà: 
DOCENZA (Corso, NomeDocente) 
Viceversa le righe della tabella DOCENZA variano nel tempo e corrispondono ai corsi 
attualmente offerti e ai relativi docenti. Di conseguenza l’istanza di una relazione è 
costituita dall’insieme, variante nel tempo, delle sue righe: 
Basi di Dati Rossi  
Elettronica Neri 
Telematica Verdi 
 
Se la base di dati fosse composta dalle sole due relazioni DOCENZA e MANIFESTO 
allora lo schema della base di dati sarebbe: 
DOCENZA (Corso, NomeDocente) 
MANIFESTO (Corso, Anno) 
e la relativa istanza della base di dati sarebbero state tutte le righe di entrambe le tabelle. 
 
Uno dei grandi vantaggi del modello relazionale è che esso definisce anche un’algebra, 
chiamata appunto algebra relazionale. Tutte le manipolazioni possibili sulle relazioni sono 
ottenibili grazie alla combinazione di cinque soli operatori: RESTRICT, PROJECT, TIME, 
UNION e MINUS. Sono stati anche definiti tre operatori addizionali, che comunque 
possono essere ottenuti applicando i soli cinque operatori fondamentali: JOIN, 
INTERSECT e DIVIDE. Gli operatori relazionali ricevono come argomento una relazione o 
un insieme di relazioni e restituiscono una singola relazione come risultato. 
Vediamo brevemente questi otto operatori: 
RESTRICT: restituisce una relazione contenente un sottoinsieme delle tuple della 
relazione a cui viene applicato. Gli attributi rimangono gli stessi. 
PROJECT: restituisce una relazione con un sottoinsieme degli attributi della relazione a 
cui viene applicato.  
TIME: viene applicato a due relazioni ed effettua il prodotto cartesiano delle tuple. Ogni 
tupla della prima relazione viene concatenata con ogni tupla della seconda. 
Basi di dati 
 
13
UNION: applicando questo operatore a due relazioni compatibili, se ne ottiene una 
contenente le tuple di entrambe le relazioni. Due relazioni sono compatibili se hanno lo 
stesso numero di attributi e gli attributi corrispondenti nelle due relazioni hanno lo stesso 
dominio. 
MINUS: applicato a due relazioni compatibili, ne restituisce una terza contenente le tuple 
che si trovano solo nella prima relazione. 
JOIN: vengono concatenate le tuple di due relazioni in base al valore di un insieme dei 
loro attributi. 
INTERSECT: applicato a due relazioni compatibili, restituisce una relazione contenente le 
tuple che esistono in entrambe le relazioni. 
DIVIDE: applicato a due relazioni che abbiano degli attributi comuni, ne restituisce una 
terza contenente tutte le tuple della prima relazione che possono essere fatte 
corrispondere a tutti i valori della seconda relazione. 
Le basi di dati relazionali compiono tutte le operazioni sulle tabelle utilizzando l’algebra 
relazionale, anche se normalmente non permettono all’utente di utilizzarla. L’utente 
interagisce con la base di dati attraverso un’interfaccia differente, il linguaggio SQL, un 
linguaggio dichiarativo che permette di descrivere insiemi di dati. Le istruzioni SQL 
vengono quindi scomposte dal DBMS in una serie di operazioni relazionali.