Progettare un database relazionale

annuncio pubblicitario
speciale (Mondo) Database
di
Massimo Ruocchio > [email protected]
Progettare un database
relazionale
La definizione della struttura dei dati è
il primo passo da compiere nella realizzazione di un’applicazione basata su
database. Ecco un semplice esempio.
Q
uasi tutte le applicazioni software sviluppate nell’ultimo decennio utilizzano un database relazionale per memorizzare i dati. Per questo, di solito, uno dei primi passi da compiere nella realizzazione di un nuovo sistema informatico è la progettazione del database. In quest’articolo saranno descritti i capisaldi dell’analisi dei dati e delle altre attività di progettazione dei database. Per non restare troppo nel
vago ci faremo accompagnare passo per passo da un esempio, una semplice biblioteca. La prima domanda che ci si
deve porre è la seguente: “Quali dati bisogna gestire?”
FIGURA 1
Schema concettuale dei dati per
l’esempio
Quali dati?
Questa domanda non ha una risposta assoluta. Solo il destinatario finale dell’applicazione, quello che dovrà utilizzarla,
può stabilire quali dati servono e quali no. Dunque bisogna
chiedere all’utente finale, ma ci sono due problemi di fondo:
le informazioni fornite sono spesso imprecise e, quasi sempre, pure incomplete. Tocca all’analista aiutare il suo interlocutore a chiarirsi le idee e spingerlo a non tralasciare dettagli importanti. Ciò può essere fatto richiedendo e proponendo spesso esempi semplici ed enumerazioni complete dei
casi possibili e delle informazioni utili. Nel caso del nostro
esempio, dopo una chiacchierata col bibliotecario sono venu-
RIQUADRO 1
Specifiche utente per la biblioteca
d’esempio
La biblioteca si occupa di dare in prestito libri ai clienti.
La durata del prestito varia da caso a caso e spesso i
libri vengono restituiti dopo il termine previsto. In media
prestiamo circa 10000 volumi l’anno. Abbiamo bisogno
di conservare la storia dei prestiti degli ultimi cinque
anni. I clienti sono registrati in un apposito schedario. A
parte l’indirizzo ed il numero di telefono, abbiamo bisogno di registrare per ogni cliente il numero di un documento di riconoscimento. Attualmente i clienti registrati
sono circa 1000, mediamente questo numero si incrementa di circa 150 unità l’anno. I dati dei clienti non vengono mai rimossi dall’archivio. In biblioteca ci sono circa
10000 opere in varie edizioni, talvolta in lingue diverse.
Spesso di un libro abbiamo più copie. In tutto i libri in
biblioteca sono circa 25000. Ogni anno acquistiamo in
media 250 libri di 100 opere diverse. Dei libri ci interessa conservare la collocazione in biblioteca, l’autore,
l’editore lo stato di conservazione (Ottimo, Sufficiente,
Mediocre, Pessimo), la lingua. Una breve biografia dell’autore ed un abstract dell’opera aiutano il cliente nella
scelta dei volumi da richiedere.
>> 30
te fuori le informazioni contenute in Riquadro 1. Il primo
passo è, dunque, realizzare un documento chiaro e semplice
che riporti ciò che è stato concordato con l’utente. Se il sistema da realizzare ha fini commerciali, è bene che
l’utente/cliente approvi esplicitamente questo documento.
Lo schema concettuale dei dati
Una volta chiarite le informazioni da gestire bisogna realizzare uno schema che descriva i dati a livello “concettuale”. Che
significa? Lo schema deve descrivere i dati a prescindere
dalla tecnologia e dagli strumenti che saranno utilizzati per
archiviarli. Ci disinteressiamo di come sarà realizzata praticamente la base dati. Vogliamo descrivere i dati da trattare,
nient’altro. Per realizzare lo schema concettuale si utilizza di
norma il modello Entità-Relazioni. Questo modello è stato
introdotto da Peter Chen nel 1976 ed ha assunto, negli anni,
un ruolo di assoluto protagonista nella progettazione dei
sistemi informatici. Questa tecnica ha subito negli anni continui affinamenti e miglioramenti fino a giungere ai moderni
“diagrammi delle classi” utilizzati in UML per descrivere le
classi dei sistemi orientati agli oggetti. In quest’articolo introdurremo solo i concetti fondamentali del modello E-R, in
bibliografia ci sono i riferimenti per approfondire l’argomento.
I due elementi fondamentali di un diagramma E-R sono le
entità e le relazioni. Tralasciando la filosofia, possiamo dire
che un’entità è una classe di oggetti (materiali o immateriali) particolarmente rilevanti nella realtà che stiamo analizzando. Nel nostro esempio è sicuramente un’entità il cliente,
inteso come classe di tutti i clienti e non come singolo. Altre
entità sono il libro, l’autore, l’editore. Ogni entità ha delle proprietà, per il cliente si può pensare al nome, al cognome,
all’indirizzo, al documento di riconoscimento, eccetera.
Queste proprietà sono dette attributi delle entità. Le entità
sono in relazione tra loro. Il prestito è una relazione tra cliente e libro. Un cliente richiede uno o più libri ed ogni libro è
prestato ad un cliente. Anche le relazioni possono avere degli
attributi, basti pensare, per il prestito, alla data di inizio, alla
DEV > n. 107 maggio 2003
(Mondo) Database
Progettare un database relazionale
data di prevista riconsegna, alla data di effettiva riconsegna.
Nella versione “classica” del modello E-R, ogni entità è rappresentata da un rettangolo, ogni attributo da un piccolo cerchio collegato mediante una linea all’entità che descrive,
ogni relazione è rappresentata da un rombo. In Figura 1 è
rappresentato lo schema concettuale del nostro esempio.
Della relazione “prestito”, che associa il cliente al libro che
questo richiede, abbiamo già detto. Le altre relazioni sono
“scrittura” (Un libro è scritto da uno o più autori ed ogni autore può scrivere uno o più libri) e “edizione” (un editore pubblica uno o più libri ed un libro è pubblicato da un solo editore). I numeri tra parentesi indicano la cardinalità minima e
massima di ogni verso delle relazioni. Gli attributi neri identificano in maniera univoca l’entità che descrivono: il cliente è
identificato dal suo codice, il libro è identificato dal codice
ISBN e da un progressivo in quanto potrebbero esserci in
biblioteca più libri con lo stesso ISBN. Esistono diversi strumenti che consentono di disegnare i diagrammi E-R. Ogni
strumento utilizza simboli propri, spesso fornendo anche una
versione non “classica” del modello E-R. Per lo schema concettuale del nostro esempio è stato utilizzato Dia, un software open source che consente di disegnare diagrammi di tutti
i tipi. Per lo schema logico (e per lo schema fisico) è stato utilizzato Erwin di Computer Associates [1].
Lo schema logico dei dati
Eccoci al terzo passo da compiere. Abbiamo un documento
che descrive i dati da trattare ed uno schema concettuale.
Il cliente ha approvato, si spera, entrambi. Ora bisogna realizzare uno nuovo schema in cui si applichi lo schema concettuale alla tecnologia che abbiamo deciso di utilizzare. In
questa fase ci interessa sapere che tipo di archiviazione
utilizzeremo (relazionale, gerarchica, in file sequenziali, in
documenti XML, …), non ci interessa ancora sapere quale
database utilizzeremo. Lo schema che dobbiamo realizzare
andrà bene per Oracle, per DB2, SQL Server e per qualunque altro DB relazionale. Per trasformare lo schema concettuale in schema logico, nel caso di modello relazionale,
si possono effettuare due passaggi:
1) una prima traduzione “grossolana” di entità e relazioni in tabelle e chiavi esterne,
2) la normalizzazione dello schema.
Per la prima traduzione si possono seguire le seguenti regole generali che non sono esaustive di tutti i casi che si possono verificare in un diagramma E-R (alcune strutture del
modello E-R non le abbiano neanche menzionate):
• Ogni entità diventa tabella, ad esempio l’entità
Cliente diventa la tabella Clienti
• Ogni attributo di Cliente diventa colonna della tabella
Clienti
• Ogni attributo identificatore diventa chiave univoca
nella tabella
• Ogni relazione dotata di attributi diventa tabella, ad
esempio la relazione Prestito diventa la tabella
Prestiti
• Gli attributi di Prestito diventano colonne di Prestiti
• Sulla tabella Prestiti devono essere aggiunte le chiavi
esterne relative alle tabelle Clienti e Libri
• Le relazioni non provviste di attributi diventano chiavi
esterne, con molta attenzione alle cardinalità massime dei due versi.
Quest’ultima regola va spiegata meglio. Se la relazione è uno
(o zero) a molti, cioè se le cardinalità massime sono uno (o
DEV > n. 107 maggio 2003
zero) ed N, la chiave esterna va messa nella tabella dalla cui
parte c’è la cardinalità uno. Ad esempio consideriamo la relazione “Edizione”. Questa relazione collega libri ed editori con
cardinalità (1,1) dalla parte del libro e (1,N) dalla parte dell’editore (un libro è pubblicato da uno ed un solo editore, un
editore pubblica uno o più libri). Le cardinalità massime sono
dunque uno dalla parte del libro ed N dalla parte dell’editore. La chiave esterna deve essere messa nella tabella dei
libri. Nella tabella dei libri ci sarà la colonna “codice editore”.
Se la relazione è molti a molti, cioè se entrambe le cardinalità massime sono N, c’è bisogno di creare una nuova tabella composta unicamente dalle chiavi esterne delle due tabelle interessate. Ad esempio vediamo il caso della relazione
“Scrittura”. Un autore può scrivere più libri ed un libro può
essere scritto da più autori. Si tratta di una relazione molti a
molti. Non è possibile mettere la colonna “codice autore”
nella tabella dei libri (ci potrebbero essere più autori per lo
stesso libro) e non è possibile mettere la colonna “codice
libro” nella tabella degli autori (ci potrebbero essere più libri
per lo stesso autore). Bisogna creare la tabella Libri_Autori
che è composta dalle due chiavi delle tabelle libri e autori, in
questa tabella vanno archiviate tutte le coppie Libro-Autore.
Se un libro è stato scritto da cinque autori avremo un record
nella tabella Libri che non fa riferimento all’autore, cinque
record nella tabella Autori che non fanno riferimento al libro
e cinque record nella tabella Libri_Autori che associano il
libro agli autori.
Applicando le regole suddette, alla fine della prima traduzione abbiamo individuato le seguenti tabelle.
Clienti (ID_Cliente, Documento, Telefono, Indirizzo,
Cognome, Nome)
Prestiti (ISBN, Progressivo, Data_inizio, ID_Cliente,
Data_Fine, Data_Restituzione, Stato, Commento)
Libri (ISBN, Progressivo, Lingua, Anno, Titolo,
ID_Editore, Stato, Collocazione, Abstract)
Autori (ID_Autore, Nome, Cognome, Biografia)
Editori (ID_Editore, Nome, Indirizzo)
Libri_Autori (ID_Autore, ISBN, Progressivo)
Dove le chiavi delle tabelle sono sottolineate. Questo
schema deve essere raffinato perché presenta ancora
molti difetti. Il processo di raffinamento, detto “normalizzazione” è l’argomento del prossimo paragrafo.
La normalizzazione
La normalizzazione è un processo di trasformazione delle
tabelle che mira ad eliminare la ridondanza dei dati ed altri
sgradevoli fenomeni molto comuni negli schemi relazionali.
Sono state definite molte “forme normali”, alcune delle quali
hanno senso solo nei libri universitari e sono improponibili in
un database reale.
Molti ritengono che uno schema logico sia sufficientemente
raffinato se soddisfa la terza forma normale. Per questo
motivo, e per ragioni di spazio, ci limiteremo a descrivere le
prime tre forme normali.
Uno schema logico è in prima forma normale se è privo di
attributi non atomici. Facciamo un esempio. Volendo registrare in un database relazionale il nome di un padre e dei
suoi figli, potremmo definire la seguente tabella
Padri (CodiceFiscale, Nome, Cognome, NomeFiglio).
Poiché un padre può avere più figli, NomeFiglio è un attributo non atomico. Non è possibile inserire nella tabella
padri più righe relative allo stesso padre ed a figli diversi,
poiché la chiave della tabella è composta del solo Codice
31 <<
speciale (Mondo) Database
Progettare un database relazionale
volta. Le due tabelle individuate sono in seconda forma normale. Ma è possibile ancora migliorare la prima. In effetti il
titolo (il titolo originale) e l’abstract non dipendono dall’edizione del libro e dunque dall’ISBN. Possiamo ancora raffinare il nostro schema come segue:
Opere (ID_Opera, TitoloOriginale, Abstract)
Libri (ISBN, Lingua, Anno, ID_Editore, Titolo, ID_Opera)
Copie (ISBN, Progressivo, Stato, Collocazione)
Solo per chiarezza utilizzeremo il nome “Edizioni” al posto
di “Libri” di qui in avanti. In seguito a queste modifiche
cambiano anche altre tabelle, gli autori sono in relazione
con l’opera e non con il libro/edizione, dunque la tabella
Libri_Autori diventa
Opere_Autori (ID_Opera, ID_Autore).
FIGURA 2
Schema logico dei dati per l’esempio
Fiscale del padre. Per soddisfare la prima forma normale ci
sono due possibilità:
• Soluzione 1) aggiungere la colonna NomeFiglio alla
chiave di Padri:
Padri (CodiceFiscale, Nome, Cognome, NomeFiglio).
In questo modo si potranno inserire più record per i
padri che hanno più figli.
Uno schema logico si dice in terza forma normale se è in
seconda forma normale e non esistono attributi che dipendono transitivamente dalla chiave della propria tabella.
Facciamo un esempio. La seguente tabella contiene dati
anagrafici:
Abbonati (CodiceFiscale, Nome, Cognome, ComuneResidenza,
RegioneResidenza).
La tabella non è in terza forma perché la regione di residenza dipende dalla persona, ma questa dipendenza è transitiva
per mezzo dell’attributo ComuneResidenza. Una volta stabilito il comune, la regione è automaticamente determinata. La
tabella dovrebbe essere divisa nelle due che seguono:
• Soluzione 2) dividere la tabella Padri nelle due tabelle:
Abbonati (CodiceFiscale, Nome, Cognome, ComuneResidenza)
Padri (CodiceFiscale, Nome, Cognome)
Comuni (Comune, Regione).
Figli (CodiceFiscalePadre, NomeFiglio)
Dove un padre con cinque figli avrà un record nella
tabella Padri e cinque record nella tabella Figli. Nella
nostra biblioteca non ci sono attributi multipli, quindi il
nostro schema logico è in prima forma normale.
Uno schema logico è in seconda forma normale se è in
prima forma normale e ogni attributo che non fa parte della
chiave dipende dall’intera chiave e non da un suo sottoinsieme. Nel caso della tabella padri della soluzione 1, in cui
avevamo aggiunto la colonna NomeFiglio alla chiave, gli
attributi Nome e Cognome dipendono solo dal codice fiscale del padre e non dal nome del figlio. La tabella non è in
seconda forma normale. Le tabelle Padri e Figli della
Soluzione 2, invece, sono in seconda forma normale poiché
tutti gli attributi (Nome e Cognome) dipendono dall’intera
chiave della tabella cui appartengono.
Tornando alla nostra biblioteca, guardiamo la tabella Libri.
L’anno di edizione, la lingua, il titolo, l’editore e l’abstract
dipendono solo dall’ISBN. Se abbiamo più copie dello stesso
libro con lo stesso ISBN, gli attributi suddetti non cambieranno di valore. La tabella Libri non è in seconda forma normale. Per portarla in seconda forma normale bisogna dividerla come segue:
Nel nostro schema logico non ci sono dipendenze transitive, quindi possiamo dire di avere terminato il processo di
normalizzazione e di avere uno schema in terza forma normale. In Figura 2 è visualizzato lo schema logico finale del
nostro esempio. Adesso bisogna applicare lo schema logico allo strumento che abbiamo deciso di utilizzare per realizzarlo.
Lo schema fisico dei dati
Alcune scelte progettuali dipendono dallo strumento che si
utilizza per archiviare i dati. Nel nostro esempio utilizzere-
Libri (ISBN, Lingua, Anno, Titolo, ID_Editore, Abstract)
Copie (ISBN, Progressivo, Stato, Collocazione)
Questo per evitare di ripetere la lingua, l’anno di edizione,
il titolo, l’editore e l’abstract per ogni copia del libro.
Queste informazioni possono essere specificate una sola
>> 32
FIGURA 3
Schema fisico dei dati per l’esempio
DEV > n. 107 maggio 2003
(Mondo) Database
Progettare un database relazionale
LISTATO 1
Istruzioni SQL/DDL per la creazione
del database d’esempio
CREATE TABLE Prestiti (
Data_restituzione
Data_Fine
Data_Inizio
Commento
Stato
Progressivo
ISBN
ID_Cliente
DATE NULL,
DATE NOT NULL,
DATE NOT NULL,
VARCHAR2(200) NULL,
VARCHAR2(1) NOT NULL
CHECK (Stato IN (‘A’, ‘C’, ‘R’)),
NUMBER(5) NOT NULL,
VARCHAR2(20) NOT NULL,
NUMBER(8) NOT NULL
);
ALTER TABLE Prestiti
ADD ( PRIMARY KEY (Data_Inizio, ISBN, Progressivo) ) ;
CREATE TABLE Clienti (
Documento
Telefoni
Indirizzo
Cognome
Nome
ID_Cliente
);
VARCHAR2(30) NOT NULL,
VARCHAR2(50) NOT NULL,
VARCHAR2(100) NOT NULL,
VARCHAR2(30) NOT NULL,
VARCHAR2(30) NOT NULL,
NUMBER(8) NOT NULL
ALTER TABLE Clienti
ADD ( PRIMARY KEY (ID_Cliente) ) ;
CREATE TABLE Copie (
Progressivo
stato
Collocazione
ISBN
...segue...
ID_editore
Nome
Indirizzo
NUMBER(5) NOT NULL,
VARCHAR2(100) NOT NULL,
VARCHAR2(200) NULL
);
ALTER TABLE Editori
ADD ( PRIMARY KEY (ID_editore) ) ;
CREATE TABLE Autori (
Bio
Cognome
Nome
ID_AUTORE
);
VARCHAR2(2000) NULL,
VARCHAR2(30) NOT NULL,
VARCHAR2(30) NOT NULL,
NUMBER(5) NOT NULL
ALTER TABLE Autori
ADD ( PRIMARY KEY (ID_AUTORE) ) ;
ALTER TABLE Prestiti
ADD ( FOREIGN KEY (ID_Cliente)
REFERENCES Clienti ) ;
ALTER TABLE Prestiti
ADD ( FOREIGN KEY (ISBN, Progressivo)
REFERENCES Copie ) ;
NUMBER(5) NOT NULL,
VARCHAR2(3) NOT NULL
CHECK (stato IN (‘OTT’, ‘SUF’,
‘MED’, ‘PES’)),
ARCHAR2(100) NOT NULL,
VARCHAR2(20) NOT NULL
);
ALTER TABLE Copie
ADD ( PRIMARY KEY (ISBN, Progressivo) ) ;
CREATE TABLE Edizioni (
Anno
Titolo
ISBN
ID_opera
ID_editore
Codice_lingua
);
LISTATO 1
ALTER TABLE Copie
ADD ( FOREIGN KEY (ISBN)
REFERENCES Edizioni ) ;
ALTER TABLE Edizioni
ADD ( FOREIGN KEY (Codice_lingua)
REFERENCES Lingue ) ;
ALTER TABLE Edizioni
ADD ( FOREIGN KEY (ID_editore)
REFERENCES Editori ) ;
NUMBER(4) NOT NULL,
VARCHAR2(2000) NOT NULL,
VARCHAR2(20) NOT NULL,
NUMBER(5) NOT NULL,
NUMBER(5) NOT NULL,
VARCHAR2(3) NOT NULL
ALTER TABLE Edizioni
ADD ( FOREIGN KEY (ID_opera)
REFERENCES Opere ) ;
ALTER TABLE Opere_Autori
ADD ( FOREIGN KEY (ID_opera)
REFERENCES Opere ) ;
ALTER TABLE Edizioni
ADD ( PRIMARY KEY (ISBN) ) ;
CREATE TABLE Lingue (
Descrizione
Codice_lingua
);
ALTER TABLE Opere_Autori
ADD ( FOREIGN KEY (ID_AUTORE)
REFERENCES Autori ) ;
VARCHAR2(100) NOT NULL,
VARCHAR2(3) NOT NULL
ALTER TABLE Lingue
ADD ( PRIMARY KEY (Codice_lingua) ) ;
CREATE TABLE Opere_Autori (
ID_AUTORE
NUMBER(5) NOT NULL,
ID_opera
NUMBER(5) NOT NULL
);
ALTER TABLE Opere_Autori
ADD ( PRIMARY KEY (ID_AUTORE, ID_opera) ) ;
CREATE TABLE Opere (
Titolo
ID_opera
Abstract
);
VARCHAR2(2000) NOT NULL,
NUMBER(5) NOT NULL,
VARCHAR2(2000) NULL
ALTER TABLE Opere
ADD ( PRIMARY KEY (ID_opera) ) ;
CREATE TABLE Editori (
DEV > n. 107 maggio 2003
...continua...
mo Oracle, uno dei database commerciali più diffusi. Per
completare la progettazione del database bisogna compiere molte altre attività. Nel seguito di questo paragrafo si
accenna rapidamente ad alcune di esse, che si possono
approfondire in altri articoli di questo speciale oppure consultando la bibliografia ed i riferimenti.
Prima di tutto bisogna scegliere i tipi di dato da utilizzare
per le colonne (gli attributi) delle tabelle, dopo averne stimato attentamente le dimensioni. In Figura 3 è rappresentato lo schema fisico della nostra biblioteca. L’unica differenza significativa rispetto allo schema logico è l’indicazione dei tipi di dato. Alcune ulteriori attività di progettazione
possono essere, in questo contesto, solo menzionate:
• Stimare il volume dei dati da gestire tabella per
tabella. Da questa stima segue il dimensionamento
delle stesse tabelle ma anche il numero e la dimensione dei tablespace (insiemi logici di più oggetti di
database) e dei datafile (i file di sistema che contengono effettivamente i dati).
33 <<
speciale (Mondo) Database
Progettare un database relazionale
• Scegliere gli indici da creare, ricordandosi che un
indice inutile danneggia le prestazioni di un database almeno quanto un indice utile le incrementa.
• Prevedere eventuali progressivi automatici da utilizzare per valorizzare le chiavi delle tabelle.
• Prevedere eventuali viste sui dati che semplifichino
l’accesso al database delle applicazioni.
• Prevedere i domini da applicare a quei campi che possono assumere solo un ristretto numero di valori.
• Prevedere eventuali meccanismi di replica dei dati
realizzabili, ad esempio, mediante snapshot.
• Partecipare all’organizzazione del sistema di alta
affidabilità, se il database deve essere disponibile
24 ore al giorno per sette giorni alla settimana.
Bibliografia
[1] M. Ruocchio – “Erwin 4.0”, Computer Programming nr.
120, 2003
[2] R. S. Pressman - “Principi di Ingegneria del Software”,
McGraw-Hill, 1997
[3] P. Chen – “The Entity Relationship Model - Toward A
Unified View of Data”, ACM Transactions on Database
Systems, Vol. 1, No. 1, pp. 9-36, 1976
[4] E.F. Codd – “A relational model of data for large shared
data banks”, Communications of the ACM, Vol. 13, No.
6, 1970
[5] C.J. Date – “An introduction to database systems, 7th
Edition”, Addison Wesley, 2000
Riferimenti
Fatto tutto ciò si può passare alla realizzazione della base
dati, lo script di creazione della nostra biblioteca è in
Listato 1.
Conclusioni
La progettazione di un database è un processo lungo e
molto delicato. Mettere a posto un errore di progettazione
quando l’intero sistema è già stato completato può avere
un impatto pesantissimo. Bisogna quindi fare ricorso a
tutte le armi di cui si dispone per cercare di ridurre al minimo gli interventi successivi.
La risorsa più impor tante a disposizione del progettista è
sicuramente l’utente del database. È l’unico che sa esattamente cosa gli ser ve, anche se spesso deve essere guidato nella ricerca e nella formalizzazione dei requisiti.
[6] http://www.oracle.com (Home page di Oracle)
[7] http://www3.ca.com/Solutions/Product.asp?ID=260
(Erwin)
[8] http://www.lysator.liu.se/~alla/dia/ (Dia)
[9] http://www.peterchen.com/ (Home page di Peter Chen)
[10] http://bit.csc.lsu.edu/~chen/pdf/erd.pdf (L’articolo
di Chen)
[11] http://www.css.tayloru.edu/~sbrandle/310/codd
1970.pdf (L’articolo di Codd)
Massimo Ruocchio
È laureato in matematica ed è cer tificato “Oracle
Application Developer” ed “XML Engineer”. Si occupa di
analisi, progettazione e sviluppo di applicazioni software.
CHI E’ CAUSA
DEL SUO MAL...
a cura di Luigi Morelli > [email protected]
Horizon
Non esistono sistemi perfetti né assolutamente sicuri. Ma chi vende ed utilizza
sistemi che si mostrano lesivi persino nei propri confronti come può definirsi?
>> 34
Ci risiamo.
Lo scorso gennaio decine di migliaia di server sono rimasti bloccati dall’ennesimo
verme informatico; stavolta a consentire l’infezione è stato un buco nella sicurezza del
prodotto Microsoft SQL Server, un buco la
cui patch era stata rilasciata sin dallo scorso giugno, secondo fonti Microsoft. “Peggio
per coloro che non hanno installato la patch
a tempo debito” è stata la risposta dei PR
del gigante di Redmond. Ricordiamo infatti
che Microsoft aveva fatto della sicurezza dei
propri sistemi un punto d’onore, dichiarazione suffragata dallo stesso Bill Gates rilasciando un e-mail circolare diretta a ciascun
membro della propria azienda informatica.
Tuttavia ciò non è apparso sufficiente a
Russ Cooper, della TruSecure Corp. che
riguardo alle affermazioni Microsoft ha
dichiarato recisamente: “Se l’affidabilità dei
servizi informatici meritava lo scorso anno
un D-, quest’anno sono precipitati ad F
(insufficienza piena)”. Tanto per iniziare,
prendiamo in esame l’assistenza Microsoft
relativa alle patch da installare sui propri server: il messaggio più descrittivo e lungo risulta essere “mantenete il vostro sistema
aggiornato con le patch” secondo il Chief
Security Officer Microsoft Scott Charney. Ma
la filosofia del “tappabuchi” contiene delle
inefficienze di fondo, e tende comunque a
mantenere vulnerabile l’azienda che la utilizza, continua Cooper. Ad esempio, la stessa
Microsoft non ha seguito le proprie istruzioni, dal momento che alcuni quadri esecutivi
hanno confermato di essere rimasti colpiti
dal verme nella propria rete interna.
“Microsoft è risultata del tutto inerme
(verso Slammer). Sono occorsi ben due giorni per eliminarne ogni traccia dalla rete interna” ha spiegato Bruce Schneier, chief technology officer della Counterpane Internet
Security, un service provider che si occupa di
network monitoring, ed esperto di crittografia. Mike Nash, corporate vice president dell’unità d’affari sicurezza di Microsoft, ha
ammesso che “Avremmo dovuto fare un
lavoro migliore” nel proteggere la rete interna dell’azienda. In questo modo pare che
siano venute alla luce le mille piccole e
stressanti inefficienze alle quali vanno incontro i clienti di Redmond; chissà che questo
mettersi nei panni dell’utente permetta a
tutti noi di usufruire di migliori servizi nel
futuro.
Certo, si potrà dire: “Prevenire è sempre
meglio che curare”. E invece no. Russ
Cooper, nell’ambito dell’analisi svolta, si è
reso conto di un altro passo falso compiuto
da Microsoft nello spinoso ambito delle
patch. Ad ottobre infatti Microsoft aveva rilasciato un correttivo per un diverso problema
relativo a SQL Server che, qualora installato
secondo le istruzioni fornite, avrebbe praticamente reso nuovamente vulnerabili i sistemi che avevano installato a suo tempo la fix
di giugno contro il buco poi utilizzato da SQL
Slammer. Come dire: “Se segui le istruzioni
ti proteggi dal buco di ottobre ma riapri quello di giugno”.
Fantascienza? Sarebbe bello credervi, ma la
storia è stata raccontata con dovizia di particolari (e di relativi nomi) dalla stessa CNN.
Certo, se detieni la maggioranza assoluta
del mercato dei Personal Computer nel
mondo sei sotto i riflettori ed ogni tuo più piccolo passo falso viene amplificato dalla fama
che riveste il tuo nome, tuttavia… Tuttavia
continuo a ripetere che secondo me è stato
un errore proporre una campagna commerciale basata sul computer facile da utilizzare:
oggi tutti si sentono (falsamente) capaci di
padroneggiarne le configurazioni grazie ad
icone, cartoni animati, suoni e grafica assolutamente inutile grazie all’interfaccia grafica
“semplice ed intuitiva”. Ma la sicurezza è un
valore ben più importante per un’azienda, e
non è più possibile affidarla a chi ha cercato
di rendere il computer semplicemente un
buffo giocattolo facile da utilizzare.
DEV > n. 107 maggio 2003
Scarica