Università degli studi di Parma Facoltà di Scienze Matematiche Fisiche Naturali Corso di Laurea in Informatica Tesi di Laurea in Basi di Dati Progetto di gestione dell’Identità in un sistema di Identity and Access Management di Ateneo Relatore Candidato Chiar.mo Prof. Roberto Alfieri Francesco Beccari Corelatore Dott. Ing. Marco Panella Anno Accademico 2008/2009 Indice 1 Obbiettivo 3 2 Introduzione 2.1 IAM . . . . . . . . . . . . . . . . . . 2.2 Identità e ciclo di vita delle Identità 2.2.1 Identità . . . . . . . . . . . . 2.2.2 Ciclo di vita delle Identità . . 2.3 Implementare un server IAM . . . . 2.3.1 LDAP . . . . . . . . . . . . . 2.3.2 Database e DBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Vincoli progettuali 3.1 Il contesto . . . . . . . . . . . . . . . . . . . . 3.1.1 Fonti: situazione attuale . . . . . . . . 3.1.2 Identità: situazione attuale . . . . . . 3.1.3 Risorse disponibili agli utenti . . . . . 3.2 Attuale gestione delle identità e degli accessi 3.2.1 Database . . . . . . . . . . . . . . . . 3.2.2 Problematiche della gestione attuale . 3.3 Sicurezza, coerenza e affidabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 9 9 10 13 13 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 19 22 24 25 26 26 27 4 Progetto 4.1 Progetto logico . . . . . . . . . . . . . . . . . . . . . 4.2 Architettura generale . . . . . . . . . . . . . . . . . . 4.3 Fonti . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 DBMS scelto . . . . . . . . . . . . . . . . . . 4.3.2 Database unificato . . . . . . . . . . . . . . . 4.3.3 La gestione delle figure esterne all’Università 4.3.4 Sicurezza nel trattamento dei dati . . . . . . 4.4 Identità unica e ciclo di vita dell’identità . . . . . . 4.5 Dati da replicare sul server LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 31 32 34 34 34 39 42 50 53 1 . . . . . . . . . . . . . . . . . . . . . . . . 5 Conclusioni 56 5.1 Sviluppi futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 A Glossario 59 B Dump MySQL 60 C Istruzioni per importare il database dallo script 74 2 Capitolo 1 Obbiettivo L’obbiettivo di questa tesi è lo studio della gestione delle Identità in un sistema di Identity and Access Management di Ateneo. Questa tesi è parte costituente dello studio intero di un progetto di Identity and Access Management dell’Università di Parma, ma ne approfondisce appunto solo l’aspetto relativo alla gestione delle Identità. L’obbiettivo in sintesi di tale progetto è quello di uniformare gli accessi ai servizi offerti dall’Università di Parma, in modo da evitare il proliferare di account diversi per ogni funzionalità offerta, semplificando notevolmente la vita agli utenti che dei servizi ne fanno uso ogni giorno. Per Identity and Access Management si intende (a grandi linee) un sistema hardware e software che gestisce gli accessi (ovvero la possibilità di entrare o meno e con quali privilegi) a un sistema informativo e in modo particolare ai servizi che tale sistema offre. Si dovrà arrivare ad una situazione nella quale ogni utente sarà presente una ed una sola volta nel sistema (diventando quindi a tutti gli effetti una identità digitale) e con tali credenziali (sempre le stesse) potrà accedere a ogni servizio (secondo le possibilità che i sui ruoli all’interno dell’universitá gli consentono). Quindi in questa tesi verrà posta l’attenzione solamente sulle problematiche dell’ Identity Management, tralasciando invece l’Access Management. 3 Capitolo 2 Introduzione In questo capitolo verranno introdotti, dal punto di vista teorico, tutti gli aspetti analizzati al momento del progetto, ovvero tutti quei principi fondamentali dell’Identity Management (e quelli più significativi dell’Access Management). 2.1 IAM Il problema del riconoscimento dell’utente e dell’attribuzione dei relativi permessi è un problema tipico di tutte quelle situazioni in cui vengono forniti particolari servizi informatici (servizi WEB, servizi di accesso a Internet, servizi di accesso a terminali Linux e Windows, posta elettronica, ...) che richiedano quindi un autenticazione e autorizzazione. Ma cosa si intende per autenticazione ed autorizzazione? L’Autenticazione è il processo che verifica l’identità ovvero risponde alla domada: l’utente è chi dice di essere? L’Autorizzazione invece è il processo che consente l’accesso alle risorse solamente a coloro che hanno i diritti (in base al loro ruolo) di usarle. Queste problematiche sono gestite dall’ Identity and Access Management che è l’intero processo (applicazione di policy appropriate ed impiego di strumenti tecnologici) volto a gestire le informazioni riguardanti le identità degli utenti e controllarne l’accesso alle risorse aziendali. Esistono due situazioni estreme a tale problematica [7]: • ogni applicazione (fornitrice del servizio) gestisce gli accessi e le autorizzazioni ai propri servizi in modo autonomo • centralizzazione degli accessi e delle autorizzazioni 4 Nella prima situazione ad ogni applicazione che gestisce un servizio compete inoltre tutto il sistema di management degli accessi e delle identità. Figura 2.1: Sistema di gestione degli accessi e delle autorizzazioni lasciato alle applicazioni Ad ogni credenziale corrisponde un insieme di permessi che l’utente possiede o meno all’interno dei vari servizi. In questo caso l’utente ha credenziali diverse per applicazioni diverse pur rivestendo lo stesso ruolo e diverse per la stessa applicazione se riveste più ruoli contemporaneamente. Le problematiche più evidenti che nascono da una soluzione di questo tipo sono: • la difficile gestione delle password • la frammentazione delle credenziali aumenta la possibilità di rischio di permessi concessi erroneamente • maggior insicurezza delle credenziali e quindi maggior vulnerabilità delle applicazioni • maggior difficoltà nell’aggiungere nuovi servizi o modificare privilegi che possono avere dei ruoli 5 Questo schema è stato sostituito successivamente dall’implementazione del sistema in cui ogni utente ha un identificativo personale ed il sistema conosce, tramite il supporto di una apposita base di dati, la mappa dei ruoli ricoperti da ciascun utente. Questa soluzione razionalizza e gestisce le procedure di autenticazione e autorizzazione tra un utente e i servizi forniti dalla sua organizzazione; in questo ambiente, la funzione di attribuzione dei permessi dell’applicazione viene sviluppata prendendo a riferimento la base dei dati dei ruoli: nel momento in cui l’utente si collega e si autentica vengono estrapolati i ruoli registrati per il suo identificativo; questi ruoli vengono utilizzati per filtrare gli accessi oppure, per ciascun ruolo, vengono assegnati un insieme di privilegi che, uniti, garantiscono l’accesso alle singole caratteristiche. Quindi il tutto diviene centralizzato in un unico sistema (indicativamente composto da un unico Database e da un sistema LDAP) detto sistema IAM (o server IAM), al quale le applicazioni si interfacciano in modo trasparente, e che quindi gestisce gli accessi, le autorizzazioni al sistema e in modo ottimale le gestione delle Identità. Questo sistema IAM gestisce indubbiamente anche l’Identità (come vedremo in seguito), e tale gestione diviene nettamente semplificata da parte del sistema, garantendo inoltre benefici che dalla precedente situazione non emergono. Figura 2.2: Sistema di gestione degli accessi e delle autorizzazioni centralizzato 6 Quindi quali sono i passi, in generale, da compiere per giungere a una situazione di questo tipo? 1 • analizzare i Database (ovvero le varie fonti da cui provendono i dati) esistenti e vedere quali sono autoritativi • decidere quali informazioni prendere, mantenere ed eventualmente aggiungere • consolidare (una persona può essere presente in più fonti) per creare quella che chiamiamo identità digitale 2 • tenere aggiornato automaticamente il database unificato Si tratta quindi di centralizzare (dove necessario) le fonti in modo tale da creare quelle identità (e quindi i loro privilegi) che dovranno accedere ai servizi offerti. I benefici ottenuti dal sistema dopo il consolidamento dell’identità sono molteplici: • i decision makers possono attivare cambiamenti più velocemente (per esempio aggiungere un nuovo servizio, oppure modificare i privilegi di accesso ad un gruppo di servizi) • l’evoluzione dei requisiti si riflette nei cambiamenti che devono essere fatti solo in un posto: il sistema IAM (e non più in tutti i servizi offerti) • secondo EduCause 3 i costi di implementazione di nuovi servizi sono ridotti del 30 per cento • le decisioni prese si applicano in un punto e si vedono i risultati e le conseguenze delle decisioni stesse • il logging è consolidato pertanto si possono applicare regole di privacy, di conservazione dei dati di auditing, si possono fare dei report, si monitora la sicurezza in modo efficace • eliminato il problema del Deprovisioning (disattivazione) relativo alla gestione delle identità in sistemi disgiunti • ridotto il numero di credenziali da conoscere da parte dell’ utente 1 Per maggiori dettagli consultare [5] Questo è un passo cruciale dell’Identity Management 3 Consultare per maggiori informazioni http://www.educause.edu 2 7 • l’organizzazione può modificare più velocemente i diritti di accesso basandosi sui ruoli • nel processo di garantire che una persona è “quello che dice di essere” l’istituzione incrementa il suo livello di riservatezza Il progetto, di cui questa tesi è come detto in precedenza lo studio di una parte, riguarda l’Università di Parma che è proprio una situazione in cui il problema della gestione dell’autenticazione e degli accessi è ancora lasciata (in maggior parte) alle varie applicazioni che gestiscono i servizi offerti. Inoltre la gestione dell’Identità, allo stato attuale, ha molti difetti ed è ben lontana dalla situazione ideale con l’implementazione di un server IAM. 8 2.2 Identità e ciclo di vita delle Identità L’Identity Management è quel processo, parte costituente dell’Identity and Access Management, che si occupa dello studio e della gestione dell’ Identità e soprattutto del ciclo di vita dell’ Identità. In questi paragrafi analizzerò questi aspetti cruciali. 2.2.1 Identità Per Identità si intende l’entità unica che accede al sistema e che deve essere riconosciuta e alla quale possono essere associati diversi ruoli; quindi è l’insieme delle informazioni che caratterizzano un utente ovvero quelle informazioni relative alla identità e ai diversi ruoli e/o attributi che questo può avere. Riassumendo un identità consiste in: • attributi, ovvero le informazioni specifiche di ogni utente distinguibili in: – attributi anagrafici (ad es. cognome, nome, data di nascita...) necessari per una corretta identificazione dell’utente – attributi riguardanti il ruolo (o i ruoli ricoperti) all’interno del sistema (ad es. per gli studenti potrebbe interessare il corso di laurea, per i docenti il dipartimento di afferenza) – attributi necessari per l’accesso alle risorse (ad es. username e password) detti anche credenziali • ruoli, ovvero funzioni che gli utenti ricoprono nel sistema (ad es. studenti, docenti e incarichi dinamici4 ) ai quali derivano dei privilegi 5 Come si può facilmente intuire gli elementi costitutivi di un identità sono profondamente legati tra di loro: avere dei ruoli all’interno di un sistema comporta inevitabilmente privilegi specifici nell’accesso alle risorse e quindi attributi specifici necessari per i ruoli ricoperti. Tornando alla definizione data in precedenza di identità ha un certo rilievo il termine unica, che sta a significare che una persona non può essere presente nel sistema se non solo sotto forma di una sola identità. 4 Per quel che riguarda una situzione universitaria quando ad esempio si creano dei gruppi di lavoro legati ad un progetto 5 Ovvero le possibilità di accedere alle risorse che il sistema mette a disposizione (ad es. la possibilità di aggiungere nuovi corsi da parte di un docente oppure di iscriversi a esami da parte degli studenti) 9 Figura 2.3: Identità: attributi, ruoli e privilegi La non univocità comporterebbe da parte dell’utente più account (quindi più credenziali) ma soprattutto da parte del sistema comporterebbe una disastrosa gestione delle informazioni riguardanti gli utenti in termini soprattutto di coerenza dei dati (ad es. le modifiche apportate ad una identità dovrebbero essere propagate a tutte le altre di quell’utente). Diviene quindi fondamentale trovare un gruppo di attributi che da soli possano identificare senza ambiguità ogni identità, in modo da potersi riferire a tale identità sempre attraverso tali attributi detti chiave. 2.2.2 Ciclo di vita delle Identità Un identità una volta entrata nel sistema non rimane immutata per sempre, ma può, ed in un sistema come quello universitario molto rapidamente, subire dei cambiamenti; Difatti le operazioni che si possono fare sono: • creazione di nuovi utenti (assegnazione credenziali) • modifiche delle credenziali (quello cioè che serve all’utente per autenticarsi all’interno del sistema) 10 Figura 2.4: Ciclo di vita dell’identità • modifiche degli attributi a causa di promozioni, trasferimenti o in generale cambio di ruolo • cancellazione account • deve essere fornito un servizio di recupero password smarrita Tutte queste operazioni sono un nodo cruciale dello IAM, e in particolar modo del Identity LifeCycle Management. Quindi la gestione del ciclo di vita delle identità comprende i processi e le tecnologie che consentono l’implementazione, l’annullamento dell’implementazione, la gestione e la sincronizzazione di identità digitali e conformi ai criteri governativi. La riuscita della gestione di identità e accessi si basa soprattutto sull’efficienza della gestione del ciclo di vita delle identità digitali [6]. I servizi di gestione del ciclo di vita delle identità consentono la creazione di identità di protezione, la gestione degli attributi, la sincronizzazione, l’aggregazione e l’eliminazione. 11 Inoltre, tali azioni devono essere eseguite in modo protetto con un itinerario di controllo completo. Esistono tre prospettive dalle quali possiamo analizzare il processo di gestione dell’ Identità[9]: • paradigma rivolto all’Identità (The pure identity paradigm): creazione, gestione e cancellazione delle identità senza considerare gli accessi alle risorse • paradigma rivolto all’accesso alle risorse (The user access paradigm): ad esempio una smart card usata da un utente per accedere a dei servizi • paradigma rivolto alle risorse (The service paradigm) The pure identity paradigm Un modello generale di Identità può essere costruito da un ridotto insieme di principi assiomatici; ad esempio tutte le identità in una data situazione sono uniche e distinguibili. Un modello assiomatico di questo tipo può essere considerato come identità pura, nel senso che tale modello non è vincolato dal contesto nel quale è applicato. Un pure identity model non è strettamente legato con la semantica degli attributi delle identità e l’Identity management può essere definito come un insieme di operazioni su un modello astratto dell’Identità. In pratica, identity management è usato per esprimere come l’informazione dell’identità deve essere arricchita e riconciliata tra diversi modelli. The user access paradigm L’Identity management in questo paradigma può integrarsi in un sistema di processi business, politiche e tecnologie che facilitano l’organizzazione a controllare gli accessi alle risorse. Rappresenta una categoria di soluzioni nelle quali gli amministratori di sistema si impiegano verso la gestione dell’autenticazione degli utenti, diritti di accesso e le restrizioni, i profili delgli account, le passwords, e tutti gli altri attributi riguardanti i ruoli in relazione alle applicazioni (ovvero ai privilegi). The service paradigm In questo paradigma, nel quale le organizzazioni evolvono i loro sistemi nel mondo di servizi convergenti, l’ambito dell’ identity management diviene più ampio e la sua applicazione nettamente più critica. Difatti include tutte le risorse della organizzazione utilizzate per fornire servizi online. Perciò può includere apparati, strumenti di rete, server, applicazioni varie. 12 2.3 Implementare un server IAM Nel paragrafo 2.1 si è parlato di server IAM in linea teorica, descrivendo cos’è e a cosa serve, vediamo ora e com’è possibile implementarlo realmente e attraverso quali strumenti software. Ricordandoci che un server IAM è un sistema che permette di gestire le identità degli utenti in un unico punto centralizzato, ed al quale si rivolgono le risorse e i servizi (offerti dal sistema) che fanno uso di queste informazioni, ad esempio per gestire autenticazione e autorizzazione. Quali sono, in sintesi, le caratteristiche che deve avere un server IAM? • deve memorizzare e mantenere grandi quantità di informazioni • deve essere affidabile, ovvero deve garantire che, anche in caso di malfunzionamenti, guasti o incidenti, non vengano perse le informazioni memorizzate • deve risulare sicuro, quindi deve avere una serie di meccanismi per assicurare che non possa essere compromesso e che i dati mantenuti non possano essere acceduti da persone non autorizzate • deve essere indubbiamente performante nelle operazioni di lettura, poiché costituiscono la maggior parte di operazioni che verrano effettuate su di esso • deve essere possibile interfacciarlo, in modo relativamente semplice, con le tecnologie di accesso che leggono le informazioni memorizzate, e con procedure automatiche per l’inserimento dei dati provenienti dalle fonti Esistono principalmente due strumenti che possiedono le precedenti caratteristiche: LDAP oppure i DBMS. Nei successivi paragrafi vengono descritti entrambi e, come si vedrà, sarà possibile utilizzarli singolarmente per implementare un server IAM, ma una buona soluzione, come si potrà vedere nel progetto può essere quella di utilizzarli entrambi, in modo congiunto, per sfruttarne al meglio le caratteristiche. 2.3.1 LDAP LDAP (Lightweight Directory Access Protocol) è sostanzialmente un protocollo di gestione e accesso a directory service. Un directory service (servizio di directory) è utilizzato per associare nomi ad oggetti, dove ogni oggetto è caratterizzato da una serie di attributi costituiti da una coppia nome - insieme di valori. 13 I directory service sono ottimizzati per effettuare ricerche di oggetti, ricerche che possono avvenire in base al nome dell’oggetto, ma anche per il valore di un dato attributo. In genere gli oggetti di un directory service rappresentano un elemento dell’ambiente in cui viene utilizzato il servizio, per esempio un utente, un computer, una stampante o una rete, ed ogni oggetto conterrà una serie di attributi che servono per descrivere ciò che rappresenta (per quello visto in precedenza un Identità nel nostro caso). Una directory è quindi un insieme di oggetti, e un directory service è un servizio che ha lo scopo di gestire gli oggetti di una directory ed effettuare ricerche su di essi. LDAP è strutturato attraverso uno schema costituito inoltre da attributi caratterizzanti il contenuto degli oggetti. Perché LDAP LDAP è un’ottima soluzione, ha notevoli vantaggi, è sempre più diffuso e stà diventando ormai uno standard nella gestione centralizzata degli utenti. Per quanto riguarda le implementazioni di server LDAP, ne’ esistono diverse, fra quelle proprietarie ricordiamo DSEE (Directory Server Enterprise Edition) di SUN, eDirectory di Novell e Active Directory di Microsoft, mentre le più diffuse implementazioni libere sono Fedora Directory Server, OpenDS, Apache DS e OpenLDAP. 2.3.2 Database e DBMS Database e DBMS: cosa sono e a cosa servono In informatica, il termine database, banca dati o base di dati, indica un archivio, strutturato in modo tale da consentire la gestione dei dati stessi (l’inserimento, la ricerca, la cancellazione ed il loro aggiornamento) da parte di applicazioni software; in altre parole l’insieme organizzato di dati utilizzati per il supporto allo svolgimento di attività [1]. Informalmente e impropriamente, la parola database viene spesso usata come abbreviazione di Database Management System (DBMS), che si riferisce invece a una vasta categoria di sistemi software che consentono la creazione e la manipolazione efficiente di database. Esiste una sottile, ma da non sottovalutare, differenza tra dati ed informazioni in informatica: i dati sono materiale informativo grezzo, non (ancora) elaborato, e memorizzato in un qualche modo; 14 al contrario l’informazione viene costruita dai dati elaborati cognitivamente cioè trasformati in un qualche schema concettuale successivamente manipolabile e usabile per altri usi cognitivi [3]. L’importanza che i dati (e quindi le informazioni) vengano gestiti nel modo più corretto, efficace ed efficente possibile è ovviamente fondamentale per una qualunque società, o in particolar modo per un’ Università: essi rappresentano il passato (mantenendo uno storico), il presente (la gestione attuale dei processi business si basa sulla corretta gestione delle informazioni) ed ovviamente il futuro (le scelte future dipendono anche dalla situazione attuale e passata). Panoramica tra i vari DBMS In questo paragrafo verrà proposta una carrellata tra quali siano oggi i DBMS presenti sul mercato al fine di scegliere quello più adatto al progetto. Questa non vuole essere una lista esaustiva e neppure un confronto completo tra le varie proposte ma una giusta premessa a quella che sarà la scelta finale [2]. Tutti i DBMS di cui parleremo sono di tipo relazionale 6 . Ne esistono di tre categorie: • sistemi chiusi o proprietari • sistemi semi-aperti • sistemi aperti Di queste categorie rispettivamente verrano prese in analisi i più importanti ovvero: • Oracle • MySQL • PostGreSQL Licenze d’uso Oracle propone al cliente una gamma di soluzioni molto ricca alla quale il cliente dovrà quindi scegliere tra le molte licenze a disposizione. Esistono tre categorie di licenze che Oracle offre: 6 Basato cioè sul concetto matematico di relazione 15 • Modalità d’uso: in questa categoria sono raccolte le licenze che limitano l’uso che l’utente può fare del software Oracle. Ci sono tre sotto-categorie: – le licenze Full Use permettono all’utente finale di utilizzare il software per qualsiasi tipo di applicazione – la licenza ASFU (Application Specific Full Use) consente un utilizzo limitato destinato ad un Partner Oracle per una singola e specifica Applicazione allo scopo di rivendita ad un utente finale determinato. Permette all’utente di utilizzare il software solo congiuntamente all’applicazione con cui e’ stato venduto – le licenze Embedded (ESL) consentono un utilizzo limitato destinate ad un Partner Oracle Solution Provider per la vendita di una soluzione in cui il software Oracle e’ appunto Embedded, ovvero inserito all’interno nel pacchetto applicativo fornito dal Partner • Tipologia: in questa categoria sono raccolte le licenze che si basano sul sistema dell’utente finale. – la licenza Named User Plus viene utilizzata negli ambienti dove il numero di utenti può essere identificato e contato – la licenza Processor è una licenza che si applica su ogni singolo processore attuo a processare il software Oracle • Scadenza della licenza: in questa categoria sono raccolte le licenze che pongono limiti sul tempo di utilizzo del software. Ci sono tre sotto-categorie: A tempo determinato, indeterminato e a tempo esteso. MySQL invece dispone di una doppia licenza. Affiancata alla GPL troviamo infatti la MySQL Commercial License. Questa permette di rilasciare le proprie modifiche con la licenza che si preferisce, senza alcun vincolo. Quindi il problema della doppia licenza coinvolge solamente chi scrive un software che si basa su MySQL. PostGreSQL è rilasciato con la BSD License la quale è considerata una delle licenze più permissive. Costi Riguardo ai costi dei servizi di Oracle, nel seguito riporteremo alcuni esempi (in dollari americani). 16 • Oracle Database Standard Edition 15 mila dollari • Oracle Database Enterprise Edition 40 mila dollari • Suite Enterprise Edition 225 mila dollari Molte delle opzioni offerte da Oracle però richiedono un ulteriore spesa compresa tra i 3000 dollari e i 25000 dollari. Tutti questi prezzi sono relativi alla licenza Processor and Perpetual, questo significa che andranno applicati ad ogni singolo processore per una durata di tempo illimitata. In caso si voglia installare questi software su più macchine dunque sarà necessario pagare ripetutamente queste somme per ogni singolo processore. Nel 2005 Oracle ha rilasciato una versione gratuita chiamata Oracle Database 10g XE (Express Edition). XE, che si basa sul codice di Oracle Database 10g Release 2, consente a chiunque di provare a costo zero tutte le funzionalità presenti in Oracle Database 10g. La versione light di Oracle offre infatti gli stessi strumenti del fratello maggiore, dando la possibilità agli utenti di sviluppare applicazioni in ambiente Java, .NET e PHP, quindi particolarmente adatta allo svuluppo di applicativi WEB. Oracle XE utilizza al massimo 1 GB di memoria, gestisce una base di dati con una dimensione massima di 4 GB e permette l’esecuzione di una sola istanza per sistema, gira sui sistemi operativi Windows e su una gran varietà di distribuzioni Linux. Ovviamente ne’ MySQL ne’ PostgreSQL presentano costi di licenze. Sicurezza Una delle problematiche maggiori dei software rilasciati senza sorgente, proprio come lo è Oracle, è proprio la sicurezza. Solo chi ha il sorgente può modificare il software al fine di risolvere eventuali bug. Nel caso di Oracle, si è definito un record di inefficienza quando furono segnalati bug critici da Alexander Kornbrust, CEO della tedesca Red-Database-Security Gmbh e solo dopo 650 giorni furono risolti e rilasciate le patch. Dalla Next Generation Security Software Ltd (Ngs), David Litchfield, uno dei bug hunter più prolifici nel campo dei database, ha dimostrato inoltre la non piena efficienza delle patch rilasciate da Oracle. Molti analisti hanno evidenziato come Oracle tenti di migliorare la sicurezza dei propri prodotti insistendo sulla via del security through obscurity ad oltranza, anche nei confronti dei propri clienti, senza disporre però di un piano di fondo per rendere i propri prodotti intrinsecamente sicuri. 17 Al contrario MySQL essendo un sistema aperto, e parzialmente libero, sfrutta la possibilità di analisi e rilascio di patch sia dalla community che segue lo sviluppo del codice sorgente del database sia dagli sviluppatori ufficiali. È garantita in questo modo un’ elevata disponibilità al rilascio di patch e questo contribuisce sicuramente ad un incremento totale della sicurezza del DBMS. A maggior ragione PostgreSQL essendo in continuo sviluppo da parte della ricerca universitaria di tutto il pianeta ha sicuramente dalla sua un gruppo di sviluppatori che si occupano di migliorare continuamente la sicurezza ed efficenza del DBMS. 18 Capitolo 3 Vincoli progettuali In questo capitolo si prenderanno in analisi tutti quei vincoli che sono stati da contorno fondamentale per la progettazione dell’architettura; tali vincoli possono essere divisi in: • il contesto in cui andrà a collocarsi il progetto • l’attuale gestione dell’Identità, e di conseguenza le problematiche di tale situazione (ovvero la parte da modificare nel progetto) • vincoli riguardanti la sicurezza, la coerenza e l’affidabilità dei dati 3.1 Il contesto Vediamo, in questo paragrafo, il contesto nell’università di Parma in cui il progetto del sistema IAM centralizzato viene applicato, cioè quelle parti che non vengono modificate dal progetto, ma alle quale esso si riferisce. In particolare vengono illustrate le fonti, ovvero da dove provengono le informazioni relative agli utenti e la gestione del ciclo di vita dell’Identità. 3.1.1 Fonti: situazione attuale La situazione delle fonti dati attualmente è ben lontana dall’ essere una situazione con un unica fonte dati centralizzata. Difatti la gestione quotidiana di una struttura come può essere l’Università di Parma si diversifica in alcuni settori, gestiti da diverse segreterie e in conseguenza diverse fonte dati. 19 Figura 3.1: Situazione attuale all’Università di Parma Tali settori sono: • gestione personale, ovvero: – professori ordinari – professori associati – ricercatori Universitari – dirigenti – dirigenti a contratto – non docenti – collaboratori linguistici 20 – personale esterno • gestione professori a contratto e supplenti • gestione borsisti e specializandi • gestione future matricole e ditte esterne (fornitrici di tirocini o opportunità di lavoro) • gestione studenti (inclusi master e dottorandi) • gestione degli studenti esteri (erasmus) Le fonti dati presenti per la gestione del personale sono due: • U-GOV (presso le varie presidenze di facoltà) che gestisce i professori a contratto e supplenti • U-GOV Anagrafica che contiene tutti i dati del personale Inoltre sono presenti ulteriori due fonti dati per la gestione degli studenti: • WebGISS per le future matricole, le ditte esterne e gli studenti esteri • GISS per gli studenti (segreteria studenti), master e specializzandi (dal settore post-laurea) e dottorandi (dal serivizio borse e dottorandi) A questi vanno aggiunti le informazioni dei dipendenti ospedalieri che hanno accesso a servizi dell’Università. Da tutte queste diversificate fonti, attraverso vari sistemi (invio di files DBF o txt) e procedure (php e perl principalmente), si inviano i dati ai Database e quindi al sistema LDAP (presenti presso il SITI) che permettono l’accesso diversificato ai vari utenti che fanno richiesta dei serivizi. Non è presente nessun tipo di controllo sulle identità, quindi una persona potrebbe essere tranquillamente presente in più fonti e di conseguenza più volte nei Database e nel sistema. 21 3.1.2 Identità: situazione attuale Ruoli: privilegi diversi per le identità All’interno di una qualunque situazione la diversificazione dei ruoli implica necessariamente la divisione dei doveri e dei diritti. In un ambiente Universitario, e nel caso specifico del sistema informativo e dei servizi che esso offre, questo di traduce in diversi privilegi che ogni ruolo possiede. Basti pensare per esempio cosa succederebbe se chiunque possa avere accesso (anche in scrittura) a fonti dati riguardanti i corsi di laurea o ancora peggio la gestione degli stipendi del personale. Distinguere e formalizzare il più possibile i ruoli che avranno accesso al sistema aiuta quindi il compito di poterli gestire nel migliore dei modi. Abbiamo perciò ruoli diversi: • studenti: persone iscritte ad uno dei corsi che l’Ateneo organizza per il conseguimento di un titolo • future matricole (coloro che ad esempio non sono riusciti ad entrare in corsi a numero chiuso) • personale strutturato (docenti e i non docenti a tempo indeterminato) • ditte esterne (fornitrici di tirocini) • professori a contratto • tutor aziendali • studenti esterni all’Università (ad esempio studenti Erasmus) Quelli elencati sono (a grandi linee) i ruoli presenti. L’elenco non è del tutto esaustivo perché non comprende (almeno in modo diretto) tutti quei casi misti ovvero di persone che ricoprono contemporaneamente più ruoli (ad esempio il caso più semplice di studenti che svolgono anche dei servizi didattici). Ciclo di vita dell’Identità: situazione attuale Vediamo ora come viene gestito allo stato attuale il ciclo di vita dell’ Identità, per ogni ruolo: • studenti: 22 – creazione credenziali: la creazione delle credenziali avviene una volta che lo studente ha pagato la prima rata delle tasse e contestualmente all’inserimento dei dati in GISS. Successivamente una procedura batch estrae i dati dal database GISS e li inserisce in un file di testo di tipo CSV in cui sono contenuti tutti i dati necessari alla gestione dei servizi. Alcune procedure bash+perl in automatico generano il file ldif per popolare il server master LDAP – modifica credenziali: gli studenti possono modificare autonomamente la password attraverso una pagina web protetta da SSL – modifica attributi: ogni sera, oltre al file contenente i dati dei nuovi iscritti, viene inviato anche un file contenente i dati modificati degli studenti già iscritti. Gli attributi sono modificati utilizzando delle procedure bash+perl simili a quelle usate per la creazione – cancellazione: la cessazione della casella di posta elettronica, due anni dopo l’ultima iscrizione, non comporta la cancellazione dal server LDAP, ma solo lo spostamento ad un altro ramo • personale strutturato: – creazione credenziali: o dati anagrafici sono inviati al Settore Innovazione Tecnologie Informatiche dove sono generati gli indirizzi email seguendo il modello [email protected] – modifica credenziali: gli utenti possono modificare autonomamente la password attraverso una pagina web protetta da SSL. Le password scadono ogni 180 giorni. Se l’utente dimentica la password o lascia passare 200 giorni dall’ultimo cambio, il sistema non permette più di accedere ai servizi e l’utente deve rivolgersi al Servizio Supporto al Settore Innovazione Tecnologie Informatiche – modifica attributi: tutti i mesi sono inviate le informazioni relative ai dipendenti attivi. Per differenza con l’elenco del mese precedente, tramite procedure analoghe a quelle usate per la generazione degli account, il Settore Innovazione Tecnologie Informatiche modifica le informazioni relative a eventuali trasferimenti, promozioni, riassunzioni, ecc. – cancellazione: per il momento non viene mai effettuata la cancellazione dell’account del personale strutturato ma viene solo registrata la cessazione modificando alcuni valore di attributi 23 • ditte esterne: per il momento non esiste la necessità di rilasciare delle credenziali a tutti i fornitori esterni in quanto tali. • professori a contratto : per il momento, sono trattati come gli strutturati, ma il trasferimento dei loro dati al Settore Innovazione Tecnologie Informatiche avviene con evidente ritardo rispetto sia all’inizio del contratto sia, soprattutto, all’inizio delle attività didattiche (questo evidentemente è un limite di tale gestione del ciclo di vita) • studenti esterni e future matricole : la gestione del loro ciclo di vita è tuttora abbastanza lontana da essere una situazione ideale (ovviamente con una situazione più razionale anche la loro gestione non sarà più problematica) 3.1.3 Risorse disponibili agli utenti Le risorse informatiche disponibili all’interno dell’università che utilizzano sistemi di autenticazione e autorizzazione si possono suddividere in servizi web, servizi di rete e postazioni computer. Per motivi di completezza (e ovviamente per dare idea della loro dimensione e importanza per utenti e per il sistema)vengono elencate le principali risorse dell’università di Parma: Un elenco dei servizi web offerti è nella tabella 3.1. I servizi di rete sono: • Wi-Fi • VPN Infine, le postazioni coumputer si possono dividere in base al sistema operativo: • Windows • Linux. 24 Nome Scopo Dove e/o chi Goal Gestione aule Fac. Ingegneria Iscrizionet Iscrizione agli esami Fac. Agraria, Economia, Farmacia, Giurisprudenza, Ingegneria, Lettere e Filosofia, Medicina Veterinaria, Scienze Politiche Yagiss Comunicazione scelta WebGISS Servizi diversi alla didattica: esenzione maggiorazione, ecc. (interfaccia al sistema informativo GISS) Studenti iscritti e docenti dell’Ateneo CSAWeb Cedolini stipendiali Personale strutturato dell’Ateneo Er-GO Domande di benefici per il diritto allo studio Studenti iscritti dell’Ateneo Campusnet Servizi diversi per la didattica Fac. Medicina e Chirurgia, Scienze MM.FF.NN. Dspace Deposito delle tesi di dottorato Dottorandi dell’Ateneo Dokeos o Moodle Sistemi di supporto alla didattica frontale Corsi dell’Ateneo, sia per studenti interni che esterni Varie applicazioni interne Form per il Nucleo di Valutazione; catalogo delle Pubblicazioni; ecc. esami a Fac. Ingegneria Tabella 3.1: Elenco dei servizi web dell’università. 3.2 Attuale gestione delle identità e degli accessi Dopo aver illustrato il contesto, vediamo come vengono gestiti attualmente gli utenti. La struttura generale è composta da un server LDAP in cui vengono replicate le informazioni degli utenti mantenute nei diversi database. I database servono quindi per mantenere i dati degli utenti che vengono prelevati dalle fonti (come descritto nel paragrafo 3.1.1), mentre il server LDAP è utilizzato per rendere disponibili questi dati alle applicazioni. 25 3.2.1 Database Nella figura 3.1 viene illustrato come le informazioni provenienti dalle fonti vengono inserite nei database attraverso vari sistemi, come l’invio di files DBF o txt, e procedure php e perl. I database mantenuti sono due: uno per gli studenti ed uno per il personale, il che è chiaramente contro la logica di mantenere un’identità unica per ogni utente, basti infatti pensare ad uno studente che diventa docente: in questo caso vengono creati due utenti distinti, uno nel database degli studenti ed uno nel database del personale. L’obiettivo del progetto è esattamente quello di evitare situazioni di questo genere e creare una identità digitale unica per ogni persona. 3.2.2 Problematiche della gestione attuale Mantenere più database distinti comporta diversi problemi se vogliamo costruire un sistema dove gestire un’unica identità per ogni persona; difatti, se una persona ricopre più ruoli, come può essere per un docente-studente, vengono mantenuti due utenti separati per una stessa persona, rendendo impossibile realizzare l’obiettivo dell’identità digitale unica. Lo sdoppiarsi possibile delle Identità implica una duplicazione della gestione del ciclo di vita (ogni modifica andrebbe gestita due volte, sempre se si fosse a conoscenza di tale situazione, altrimenti si ci ritroverebbe in una situazione di incoerenza). Questo problema lo si risolverà progettando un database unico nel quale memorizzare e mantenere le informazioni degli utenti e le informazioni relative a tutti i ruoli da essi ricoperti. 26 3.3 Sicurezza, coerenza e affidabilità Quando si parla di progetti informatici riguardanti il trattamento di dati importanti, come nel caso del nostro progetto, non si possono e non si devono per alcun motivo tralasciare l’analisi dettagliata delle problematiche riguardanti la sicurezza dei dati. La sicurezza dell’Identità, e di conseguenza delle sue caratteristiche (attributi, privilegi...), è di vitale importanza per una struttura con molti utenti come lo è l’Università di Parma; come abbiamo visto l’identità digitale si viene a costituire nel server IAM, e in particolar modo (come vedremo nel capitolo successivo), nel Database. Verranno perciò messi a fuoco quali sono i problemi relativi alla sicurezza nelle Basi di Dati. Le minacce ai Database si possono dividere in tre categorie: • perdita di integrità: se vengono cioè apportate modifiche non autorizzate al Database • perdita di disponibilità: se non sono disponibili (ai servizi o agli utenti) i dati • perdita di riservatezza: se viene a meno la protezione dei dati Queste minacce possono essere causate da attacchi: • a livello fisico: furti, danni • a livello logico (di intercettazione, di deduzione, di intrusione, di disturbo) • disastri naturali o accidentali • errori o bug software/hardware • errori umani Vediamo più in dettaglio quali possono essere le soluzioni a questi delicati problemi: • ridondanza: replicare i dati in luoghi (o supporti) diversi • controllo degli accessi (permettere solo alle persone autorizzate di accedere ai dati dando privilegi diversi) • politiche di prevenzione 27 Con ridondanza intendiamo la replica dell’intero Database su supporti diversi (server ubicati in luoghi differenti ad esempio) in modo da evitare danni irreparabili in caso di guasti, furti al Database originale. La replica comporta però problematiche di coerenza dei dati: non è ammissibile che nelle repliche esistano dati non aggiornati; ciò comporta la realizzazione di politiche di aggiornamento (ad esempio da effettuarsi durante la notte) tra il database master e le copie. Ciò può avvenire banalmente con un passaggio (ovviamente attraverso canali sicuri) di script SQL (il linuguaggio dei Database) riguardanti le modifiche del giorno passato. Per evitare ulteriori problemi conviene mettere in atto delle politiche di prevenzione, ovvero di implementare delle procedure volte a salvaguardare i dati [8]: • politiche di log: si deve tener traccia delle modifiche fatte al Database in modo da poter ricostruire i cambiamenti in caso di guasti • politiche di backup: salvare il contenuto del Database (o di un sottoinsieme) su supporti diversificati riduce il richio di perdita dei dati Un altro aspetto fondamentale della sicurezza dei dati riguarda la gestione delle operazioni sul Database; immaginiamo che durante una scrittura sul database ci sia un guasto alla rete. Cosa può succedere nel Database? Le modifiche sono state apportate tutte o solo una parte? Se fosse cosı̀ ci troveremmo di fronte ad uno stato non coerente perchè non rappresenterebbe la realtà: diventa quindi fondamentale l’uso (da parte ad esempio dei servizi) delle transazioni, ovvero di operazioni atomiche, che permettono perciò di passare da uno stato coerente all’altro. Le proprietà di cui godono le transazioni, le cosidette proprietà Acide, sono: • Atomicità: è la proprietà del tutto o niente, ovvero o le modifiche sono apportate per intero o non sono eseguite per niente • Consistenza: l’esecuzione di una transazione preserva la consistenza del database • Isolamento: ogni transazione è isolata dal resto del mondo e non deve essere influenzata da altri cambiamenti di altre transazioni a lei concorrenti • Durabilità: le modifiche apportate da una transazione rimangono anche dopo danni al database Garantire perciò che tutte le operazioni (che in altri termini gestiscono il ciclo di vita) sul Database rispettino queste quattro proprietà, unito ad un insieme di politiche 28 di sicurezza preventiva (backup e logging), la maggior sicurezza data da delle copie aggiornate (ridondanza) e un controllo sicuro degli accessi garantisce che la Base di dati è sicura, o comunque preparata nel migliore dei modi a danni accidentali o meno. 29 Capitolo 4 Progetto In questo capitolo si entrerà nel merito del progetto, analizzando le scelte architetturali (prima da un punto di vista più astratto) e concentrando l’attenzione in seguito sulle scelte inerenti l’Identità (Database, ciclo di vita, sicurezza nel trattamento dei dati). Ipotizzando che la gestione degli accessi sia già implementata (quindi anche lo schema dell’LDAP) resterà soltanto da analizzare quali siano gli attributi da replicare sull’LDAP. 30 4.1 Progetto logico Il progetto, del quale entreremo in dettaglio in questo capitolo, viene illustrato da un punto di vista logico, o perlomeno più astratto, nella figura 4.1. Figura 4.1: Progetto da un punto di vista più astratto In termini logici possiamo quindi osservare come si ci prefigga di fare interagire la gestione del ciclo di vita dell’identità con un server IAM. Per quel che riguarda la creazione, le varie modifiche o la cancellazione riguardanti le identità innanzitutto si verrà a contatto con le varie fonti (diversificate come ora per ruoli 1 ) prima di interagire (attraverso opportuni strumenti di sincronizzazione) con il server IAM. Quando un utente vorrà accedere ad una risorsa, attraverso vari strumenti di autenticazione, vi potrà accedere solo dopo che tale risorsa abbia gestito nel modo migliore l’accesso tramite il server IAM. Nei paragrafi successivi vedremo come tale server IAM verrà implementato e quali siano le problematiche conseguenti a tale scelta. 1 Non è pensabile di poter modificare le fonti poichè esse sono strettamente legate con le varie segreterie di appartenenza 31 4.2 Architettura generale Quindi gli obbiettivi del progetto sono di centralizzare le fonti dati e permettere cosı̀ l’interazione con un sistema LDAP in modo da centralizzare gli accessi ai servizi offerti dall’Università e di poter gestire in maniera ottimale il ciclo di vita dell’Identità. Le fonti dati scambieranno i dati in modo sicuro (come vedremo in seguito) con il DB centralizzato il quale popolerà in parte il server LDAP, che attraverso sistemi di bilanciamento del carico e protocolli sicuri gestirà le richieste dei servizi in modo veloce e sicuro. 32 Figura 4.2: Obbiettivi del progetto 33 4.3 4.3.1 Fonti DBMS scelto Senza soffermarci su discorsi di performance ma cercando solamente dei test effettuati tra le ultime versioni di MySQL, PostgreSQL e Oracle XE si nota subito una differenza di tempi di risposta tra MySQL e PostgreSQL (tempi eccellenti) e Oracle. MySQL e PostgreSQL, al contrario di Oracole XE, non usano un server web che comunica con un server database, ma si basa su un programma compilato, quindi molto più veloce. Scartando perciò l’ipotesi Oracle restano due prodotti snelli, leggeri, flessibili, altamente configurabili. La scelta per il DBMS del progetto cade su MySQL, poichè vince la sfida con PostgreSQL per la maturità del prodotto (incrementata dalla recente aquisizione di una ditta come la Sun) e soprattutto la maggiore facilità di utilizzo dovuta a strumenti di gestione, molto comodi per gli sviluppatori web, come phpmyadmin. Altri motivi sono i costi (nessuno per le licenze) e l’amplio utilizzo che se ne fa sia presso il centro di calcolo sia in tutta l’Università. 4.3.2 Database unificato L’obbiettivo quindi è quello di avere un unico DB locale presso il SITI che raccolga (in un primo momento) e mantenga costantemente aggiornate le infomazioni presenti in: • U-GOV • GISS • WebGISS • Dati dipendenti AOU e AUSL Esso dovrà tenere traccia dei dati anagrafici degli utenti e dei ruoli assunti all’interno dell’Università, in modo da poter diversificare efficacemente e in modo centralizzato i privilegi per accedere ai servizi offerti. Elenchiamo più in dettaglio i requisiti richiesti al Database unificato2 : • Per ogni Identità si deve tenere traccia di: – Cognome 2 Tali requisiti vengono imposti sia per motivi di anagrafica che per motivi di gestione ottimale degli accessi ai servizi 34 – Nome – Sesso – Codice Fiscale – Data nascita – Via e CAP di residenza – Via e CAP di domicilio – Mail personale – Telefoni – Fax – Titolo onorifico – Nazione di residenza, cittadinanza e domicilio – Luogo di residenza, cittadinanza e domicilio – Ruolo ricoperto allı̀’interno dell’Università – Dati LDAP • Per ogni Stato si deve tenere traccia di: – Nome – Codice IANA – Codice ISTAT – Codice Agenzie delle Entrate – Codice 2 lettere – Codice 3 lettere • Per ogni Luogo si deve tenere traccia di: – Comune – Provincia – Descrizione – Codice ISTAT – Codice Agenzie delle Entrate • Per ogni Ruolo ricoperto si deve tenere traccia di: 35 – IDSGE – Codice SISA – Data Inizio – Data Fine – Codice Ruolo – Profilo e categoria – Stati del ruolo – Incarichi – Aree e settori – Dipartimenti, serivizi e sezioni e sedi collegate • In particolare per gli studenti della carriera interessa: – Matricola – Anno di ultimo pagamento delle tasse – Anno di prima immatricolazione – Anno della laurea triennale – Anno della laurea specialistica – Anno di prima immatricolazione – Corso di laurea di appartenenza (e Facoltà di conseguenza) • Dei dati ultili per il sistema LDAP (3 ) interessa: – CN – Mail assegnata – UID – UID Numeber – SAMBA SID – Password Iniziale – Gli attributi della Object Class EduPerson 3 Sono necessari per i processi di autorizzazione e autenticazione 36 Una volta definiti tutti i vincoli del problema di può procedere alla realizzazione dello schema relazionale (basato cioè su relazioni e associazioni [1]). Si può quindi pensare di creare l’entità fondamentale Identità, contenente tutte le informazioni anagrafiche, alla quale si associano i ruoli che conterranno informazioni specifiche a seconda del ruolo ricoperto. Lo schema relazionale del Database unificato con queste informazioni è rappresentato nella figura successiva: 37 38 Il passo successivo è quello si passare dallo schema astratto alla struttura in tabelle tipica dei Database. Per fare questo è stato riportato il dump di tale progetto nell’appendice B. 4.3.3 La gestione delle figure esterne all’Università Come detto in precedenza nel paragrafo 3.1.2, la gestione del ciclo di vita allo stato attuale oltre ad essere poco efficace è anche incompleta perchè alcuni ruoli non vengono proprio (o comunque in maniera non informatizzata) gestiti. È necessario procedere all’identificazione (per la legge anti-terrorismo recentemente entrata in vigore), di tutte quelle figure (che richiedano credenziali di accesso ai servizi offerti dal sistema), non presenti (come indicato nei paragrafi precedenti), nelle fonti del sistempa; queste figure sono: • collaboratore coordinato continuato • collaboratore di ricerca • convenzionato • cultore della materia • dipendente di altra Università • dipendente altro ente di ricerca • dipendente di altra azienda sanitaria • dottorando di altra Università • fornitore (dipendente o titolare delle ditte fornitrici) • interinale • lavoratore occasionale (contratto personale senza partita IVA) • libero professionista (contratto personale con partita IVA) • ospite con accesso al servizio di VPN 39 • ospite • studente di altra Università • tutor Presento come valida soluzione al problema degli account richiesti per tali figure, la soluzione adottata dall’Università di Modena (adattata ovviamente al contesto di Parma)[4]. La procedura è accessibile al solo personale incaricato per l’identificazione a norma del D. Lgs. 196/2003. È necessario almeno un incaricato per ogni struttura. L’incarico è conferito dal responsabile del trattamento dati nelle rispettive strutture di appartenenza. L’accesso deve essere controllato tramite LDAP (autenticazione) e profilo di autorizzazione. • la procedura è fornita mediante interfaccia web sicura in modo da essere accessibile in modo distribuito senza onere di gestione della parte client • la procedura deve acquisire i dati anagrafici, il documento di identità, gli estremi dell’incarico e registrarli in un deposito dove tali dati siano facilmente reperibili • i dati precedentemente acquisiti devono essere correlati con i dati provenienti dalle fonti (GISS, WebGISS, ...) ed andare con essi a popolare il database LDAP • la procedura prevede la popolazione di due tabelle: la tabella IDENTITÀ e la tabella RUOLI. Per maggiori dettagli riguardo alle tabelle coinvolte si guardi il progetto del Database Unificato • alle persone a cui viene affidato almeno un incarico devono perciò essere date le credenziali che permetteranno quindi l’accesso ai servizi d’ateneo mediante l’autenticazione LDAP e il profilo previsto dalle policy di ateneo • la procedura deve permettere di sanare la situazione esistente relativa alle credenziali assegnate dal servizio di posta elettronica: molte delle credenziali assegnate in passato non sono più da considerare valide perchè si è persa traccia dei relativi richiedenti o referenti o perchè è mancato il controllo costante sulla validità dei dati. Le credenziali da tenere vanno associate all’identificazione effettuata con la nuova procedura 40 Ecco in dettaglio le operazioni a carico dell’operatore necessarie per una corretta identificazione e per l’ottenimento delle credenziali: 1. procurarsi un documento valido e il tesserino del codice fiscale della persona da identificare 2. preparare un foglio con la copia del documento di identità (fronte e retro) e del tesserino del codice fiscale in un unica facciata (se possibile). In alternativa in una facciata il fronte e retro del documento di identità e nell’altra il codice fiscale 3. inviare il foglio al SITI utilizzando la qualità pià alta possibile 4. collegarsi alla pagina della procedura di identificazione del personale esterno usando le proprie credenziali di accesso UNIPR 5. se la persona possiede già le credenziali di accesso ai servizi informatici recuperare il suo nominativo dalla Lista Attesa e andare al punto 6. Se la persona non possiede ancora le credenziali di accesso ai servizi informatici procedere con Nuovo Esterno 6. inserire il codice fiscale e procedere con Cerca i dati dell’utente in Anagrafica 7. completare i dati mancanti. nei campi Documento di Identità e Codice Fiscale andare ad inserire il file corrispondente al FAX precedentemente inviato. Il nome del file è composto da due parti: una prima parte costituita dal numero del vostro numero di FAX; una seconda parte costituita dall’ora in cui avete inviato il FAX. I FAX inviati al FAX server rimangono in giacenza fino alla mezzanotte dopo di che vengono automaticamente rimossi 8. procedere con Registra i Dati appena inseriti 9. controllare se i dati della persona sono corretti e procedere con Conferma inserimento di questi dati nel DB 10. a questo punto procedere con l’assegnazione dell’Incarico: una volta compilati i campi procedere con Salva i dati del nuovo incarico 11. procedere stampando la pagina e consegnarla all’utente Ovviamente la procedura, espressa precedentemente in modo dettagliato, potrà essere modificata a seconda delle esigenze, e come descritto richiede un sistema di creazione credenziali web. 41 4.3.4 Sicurezza nel trattamento dei dati La sicurezza del trattamento dei dati deve essere una caratteristica di un qualunque sistema informativo, e a maggior ragione deve essere una priorità per questo progetto, trattando dati personali di studenti e altre persone. Ora verranno analizzati gli aspetti legislativi del trattamento dei dati e successivamente gli aspetti di affidabilità discussi nel paragrafo 3.3. La regolamentazione di tali questioni è principalmente affidata al decreto Legislativo del 30 giugno 2003 n.196, argomento del paragrafo seguente. Decreto legislativo 196/2003 Tale decreto 4 ,volto a regolamentare la sicurezza sui dati che possono essere presenti in un sistema, definisce5 : • trattamento: qualunque operazione o complesso di operazioni, effettuati anche senza l’ausilio di strumenti elettronici, concernenti la raccolta, la registrazione, l’organizzazione, la conservazione, la consultazione, l’elaborazione, la modificazione, la selezione, l’estrazione, il raffronto, l’utilizzo, l’interconnessione, il blocco, la comunicazione, la diffusione, la cancellazione e la distruzione di dati, anche se non registrati in una banca di dati • dato personale: qualunque informazione relativa a persona fisica, persona giuridica, ente od associazione, identificati o identificabili, anche indirettamente, mediante riferimento a qualsiasi altra informazione, ivi compreso un numero di identificazione personale • dati identificativi: i dati personali che permettono l’identificazione diretta dell’interessato; • dati sensibili: i dati personali idonei a rivelare – l’origine razziale ed etnica – le convinzioni religiose, filosofiche o di altro genere – le opinioni politiche – l’adesione a partiti, sindacati, associazioni od organizzazioni a carattere religioso, filosofico, politico o sindacale 4 Per il testo completo visitare www.http://www.camera.it/parlam/leggi/deleghe/Testi/03196dl. htm 5 Questa è la parte giuridico-legislativa della gestione del ciclo di vita dell’Identità 42 – lo stato di salute e la vita sessuale • dati giudiziari: i dati personali idonei a rivelare provvedimenti in materia di casellario giudiziale, di anagrafe delle sanzioni amministrative dipendenti da reato e dei relativi carichi pendenti, o la qualità’ di imputato o di indagato Ora, per quello che interessa a questo progetto, mettiamo in luce gli aspetti, e di conseguenza gli articoli di tale decreto: • Art. 11 (Modalita’ del trattamento e requisiti dei dati): – I dati personali oggetto di trattamento sono: ∗ trattati in modo lecito e secondo correttezza; ∗ raccolti e registrati per scopi determinati, espliciti e legittimi, ed utilizzati in altre operazioni del trattamento in termini compatibili con tali scopi ∗ esatti e, se necessario, aggiornati ∗ pertinenti, completi e non eccedenti rispetto alle finalità per le quali sono raccolti o successivamente trattati ∗ conservati in una forma che consenta l’identificazione dell’interessato per un periodo di tempo non superiore a quello necessario agli scopi per i quali essi sono stati raccolti o successivamente trattati – I dati personali trattati in violazione della disciplina rilevante in materia di trattamento dei dati personali non possono essere utilizzati • Art. 16 (Cessazione del trattamento): in caso di cessazione, per qualsiasi causa, di un trattamento i dati sono: – distrutti – ceduti ad altro titolare, purchè destinati ad un trattamento in termini compatibili agli scopi per i quali i dati sono raccolti – conservati per fini esclusivamente personali e non destinati ad una comunicazione sistematica o alla diffusione – conservati o ceduti ad altro titolare, per scopi storici, statistici o scientifici • Art. 23 (Consenso): – Il trattamento di dati personali da parte di privati o di enti pubblici economici è ammesso solo con il consenso espresso dell’interessato 43 – Il consenso può riguardare l’intero trattamento ovvero una o più operazioni dello stesso • Art. 31 (Obblighi di sicurezza): I dati personali oggetto di trattamento sono custoditi e controllati, anche in relazione alle conoscenze acquisite in base al progresso tecnico, alla natura dei dati e alle specifiche caratteristiche del trattamento, in modo da ridurre al minimo, mediante l’adozione di idonee e preventive misure di sicurezza, i rischi di distruzione o perdita, anche accidentale, dei dati stessi, di accesso non autorizzato o di trattamento non consentito o non conforme alle finalità della raccolta • Art. 34 (Trattamenti con strumenti elettronici): Il trattamento di dati personali effettuato con strumenti elettronici è consentito solo se sono adottate le seguenti misure minime: – autenticazione informatica – adozione di procedure di gestione delle credenziali di autenticazione – utilizzo di un sistema di autorizzazione – aggiornamento periodico dell’individuazione dell’ambito del trattamento consentito ai singoli incaricati e addetti alla gestione o alla manutenzione degli strumenti elettronici – protezione degli strumenti elettronici e dei dati rispetto a trattamenti illeciti di dati, ad accessi non consentiti e a determinati programmi informatici – adozione di procedure per la custodia di copie di sicurezza, il ripristino della disponibilità dei dati e dei sistemi – tenuta di un aggiornato documento programmatico sulla sicurezza Ora caliamoci nei requisiti riguardanti il trattamento dei dati mediante strumenti elettronici (allegato B dlgs. 196/2003): • Sistema di autenticazione informatica: – Il trattamento di dati personali con strumenti elettronici è consentito agli incaricati dotati di credenziali di autenticazione che consentano il superamento di una procedura di autenticazione relativa a uno specifico trattamento o a un insieme di trattamenti 44 – Le credenziali di autenticazione consistono in un codice per l’identificazione dell’incaricato associato a una parola chiave riservata conosciuta solamente dal medesimo oppure in un dispositivo di autenticazione in possesso e uso esclusivo dell’incaricato, eventualmente associato a un codice identificativo o a una parola chiave, oppure in una caratteristica biometrica dell’incaricato, eventualmente associata a un codice identificativo o a una parola chiave – Ad ogni incaricato sono assegnate o associate individualmente una o piu’ credenziali per l’autenticazione – Con le istruzioni impartite agli incaricati è prescritto di adottare le necessarie cautele per assicurare la segretezza della componente riservata della credenziale e la diligente custodia dei dispositivi in possesso ed uso esclusivo dell’incaricato – La parola chiave, quando è prevista dal sistema di autenticazione, è composta da almeno otto caratteri oppure, nel caso in cui lo strumento elettronico non lo permetta, da un numero di caratteri pari al massimo consentito; essa non contiene riferimenti agevolmente riconducibili all’incaricato ed è modificata da quest’ultimo al primo utilizzo e, successivamente, almeno ogni sei mesi – Il codice per l’identificazione, laddove utilizzato, non può essere assegnato ad altri incaricati, neppure in tempi diversi – Le credenziali di autenticazione non utilizzate da almeno sei mesi sono disattivate, salvo quelle preventivamente autorizzate per soli scopi di gestione tecnica – Le credenziali sono disattivate anche in caso di perdita della qualità che consente all’incaricato l’accesso ai dati personali – Sono impartite istruzioni agli incaricati per non lasciare incustodito e accessibile lo strumento elettronico durante una sessione di trattamento – Quando l’accesso ai dati e agli strumenti elettronici è consentito esclusivamente mediante uso della componente riservata della credenziale per l’autenticazione, sono impartite idonee e preventive disposizioni scritte volte a individuare chiaramente le modalità con le quali il titolare può assicurare la disponibilità di dati o strumenti elettronici in caso di prolungata assenza o impedimento dell’incaricato che renda indispensabile e indifferibile intervenire per esclusive necessitè di operativitè e di sicurezza del sistema. In tal caso la custodia delle copie delle credenziali è organizzata garantendo la relativa 45 segretezza e individuando preventivamente per iscritto i soggetti incaricati della loro custodia, i quali devono informare tempestivamente l’incaricato dell’intervento effettuato. • Sistema di autorizzazione: – I profili di autorizzazione, per ciascun incaricato o per classi omogenee di incaricati, sono individuati e configurati anteriormente all’inizio del trattamento, in modo da limitare l’accesso ai soli dati necessari per effettuare le operazioni di trattamento – Periodicamente, e comunque almeno annualmente, è verificata la sussistenza delle condizioni per la conservazione dei profili di autorizzazione • Altre misure di sicurezza: – I dati personali sono protetti contro il rischio di intrusione e dell’azione di programmi mediante l’attivazione di idonei strumenti elettronici da aggiornare con cadenza almeno semestrale – Gli aggiornamenti periodici dei programmi per elaboratore volti a prevenire la vulnerabilità di strumenti elettronici e a correggerne difetti sono effettuati almeno annualmente – Sono impartite istruzioni organizzative e tecniche che prevedono il salvataggio dei dati con frequenza almeno settimanale • Documento programmatico sulla sicurezza: – Entro il 31 marzo di ogni anno, il titolare di un trattamento di dati sensibili o di dati giudiziari redige anche attraverso il responsabile, se designato, un documento programmatico sulla sicurezza contenente idonee informazioni riguardo: ∗ l’elenco dei trattamenti di dati personali ∗ la distribuzione dei compiti e delle responsabilità nell’ambito delle strutture preposte al trattamento dei dati ∗ l’analisi dei rischi che incombono sui dati ∗ le misure da adottare per garantire l’integrità e la disponibilità dei dati, nonchè la protezione delle aree e dei locali, rilevanti ai fini della loro custodia e accessibilità 46 ∗ la descrizione dei criteri e delle modalità per il ripristino della disponibilità dei dati in seguito a distruzione o danneggiamento ∗ la previsione di interventi formativi degli incaricati del trattamento, per renderli edotti dei rischi che incombono sui dati, delle misure disponibili per prevenire eventi dannosi, dei profili della disciplina sulla protezione dei dati personali più rilevanti in rapporto alle relative attività, delle responsabilità che ne derivano e delle modalità per aggiornarsi sulle misure minime adottate dal titolare. La formazione è programmata già al momento dell’ingresso in servizio, nonchè in occasione di cambiamenti di mansioni, o di introduzione di nuovi significativi strumenti, rilevanti rispetto al trattamento di dati personali ∗ la descrizione dei criteri da adottare per garantire l’adozione delle misure minime di sicurezza in caso di trattamenti di dati personali affidati, in conformità al codice, all’esterno della struttura del titolare Privacy dei dati Quindi il progetto, e in particolare il loro passaggio dalle diverse fonti al database unificato, dovrà attenersi alle direttive del decreto esposto nel paragrafo precedente. Notiamo innanzitutto che i dati che vengono trattati non sono nè sensibili nè giudiziari, quindi tutte le indicazioni nel caso di trattamento di queste categorie si possono trascurare. Entrando nel dettaglio: • Dall’articolo 11 i dati personali oggetto di trattamento sono trattati come indicato (in modo lecito e secondo correttezza, raccolti e registrati per scopi determinati, esatti e aggiornati, pertinenti), da cui si deduce che l’aggiornamento dei dati deve essere trattato in modo ottimale (ved. 3.1.2) • Per l’articolo 16 i dati nel nostro progetto vengono conservati per fini esclusivamente personali e non destinati ad una comunicazione sistematica (ved. 3.1.2) • Già allo stato attuale tutte le misure minime elencate nell’articolo 34 sono rispettate sia in termini di autenticazione per l’accesso ai dati sia in termini di sicurezza dei dati dal punto di vista software (protezione da intrusioni esterne) sia hardware • Per le direttive specifiche presenti nell’allegato B verifichiamo che: – Il trattamento di dati personali è consentito solo a personale autorizzato 47 – Lo scopo di questo progetto è proprio quello di rendere ad ogni incaricato una ed una sola credenziale per l’autenticazione – Le problematiche di lunghezza minima della password e difficoltà della password sono già verificati allo stato attuale – L’univocità delle credenziali (password e username ad esempio) sono una caratteristica fondamentale del progetto – Allo stato attuale non esiste alcuna procedura che permetta la disattivazione di credenziali di autenticazione non utilizzate da almeno sei mesi, quindi questa procedura automatica dovrà essere implementata – Le credenziali date dal SITI, per come visto, non possono che essere univoche Possiamo perciò verificare come il progetto rispetti nella sua interezza (semplificato anche dal fatto di non trattare dati sensibili o giuridici) il decreto legge 196/2003. 48 Policy per l’affidabilità, coerenza e la sicurezza Quanto visto nel paragrafo 3.3 esistono oltre agli aspetti di trattamento dei dati procedure da rispettare per garantire che i dati non: • vengano persi (per cause di vario genere) • siano acceduti da personale non autorizzato • stiano in uno stato incoerente Mostriamo brevemente quali possano essere le soluzioni per evitare tutto ciò. • provvedere a politiche di backup, quindi effettuare il dump 6 del database : – ogni notte (quando il carico di lavoro è minore – copiarlo su dispositivi removibili (nastri, DVD o altro) – copiarlo in server differenti • creare gruppi di utenti (con relativi insieme di credenziali), attraverso le procedure di MySQL, che abbiamo diritti differenti: – gruppo admin, con potere di modificare il Database – gruppo onlyread, con la possibilità di sola lettura – gruppo service, per quei servizi che necessitano di informazioni presenti nel database – gruppo other, a cui è negato tutto – altri gruppi specifici Tutte queste procedure sono facilmente realizzabili in MySQL oltre che per via testuale anche attraverso ottimi strumenti come phpmyadmin e MySQLAdministrator. 6 Ovvero lo script contenente le istruzioni per ricreare il database 49 4.4 Identità unica e ciclo di vita dell’identità Una volta studiato il Database centralizzato che gestirà tutte le identità del sistema sorge un problema non banale: quale attributo (o quale insieme di attributi) può essere utilizzato come chiave identificativa dell’identità? Esso deve essere univoco (il che può escludere la scelta ovvia e banale del codice fiscale) e il più possibile facile da ricordare per l’utente poiché diverrà molto probabilmente l’UserID in un sistema centralizzato nel sistema classico (ma non unico possibile) di autenticazione Username e Password. Tra le varie ipotesi: • indirizzo di posta elettronica • identificativo progressivo numerico, legato ad esempio ad una smart-card • il campo CN (fusione di cognome, punto e nome più eventualmente un numero per distinguere omonimi) • chiavi costruite ad hoc che siamo più memoniche di un contatore, ad esempio: – matricola (prima matricola per gli studenti) + data di nascita (nella forma gg/mm/aaaa) – matricola (prima matricola per gli studenti) + prima password (implica per sicurezza il cambio della prima password) – altri costruiti ad hoc... Per quello visto all’interno del progetto, non risulta necessario modificare l’attuale policy di gestione del ciclo di vita dell’identità, ma anche se in un futuro si dovesse avere la necessità di modificare tali politiche non sarà necesario stravolgere l’architettura del progetto. Vediamo in dettaglio quali possano essere i passi necessari per il corretto funzionamento del ciclo di vita dell’Identità rispetto alle Fonti e al Server IAM (come illustrato in figura 4.1): • creazione di una nuova Identità: 1. l’utente si registra presso una delle varie segreterie (una delle varie fonti) 2. le informazioni del nuovo utente dalla fonte vengono trasferite (mediante canali sicuri, quindi cifrati) al Database IAM ogni sera 50 3. un controllo presente nel database (ad esempio uno script PERL) verifica che l’ Identità non sia già nel Database verificando che ad esempio nome, cognome, data di nascita e codice fiscale non siano già uguali in un altra Identità7 ; se ciò fosse verificato si aggiungerebbe la nuova Identità e il suo ruolo collegato altrimenti si aggiungerebbe solamente il nuovo ruolo ricoperto (saremmo quindi nel caso di Modifica di Ruolo8 ) • cancellazione di un Identità: si è valutato nel progetto più opportuno non cancellare mai un Identità dal server IAM, ma se questo fosse necessario verrebbe vista come una comune modifica da trasferire dalla fonte al Database IAM la sera stessa della cancellazione (come nel caso della creazione) • modifica di attributi: come nei casi precedenti le modifiche di attributi sono inviate la sera dalle fonti al Database IAM • modifica credenziali d’accesso: deve essere fornita una pagina web che abbia accesso diretto al Database e che quindi possa permettere alle Identità di cambiare le credenziali come ritengono Come si può facilmente intuire dai passi descritti sopra, i dati presenti nelle fonti non sono coerenti con i dati presenti nel Database IAM per al più un giorno. Inoltre i dati presenti nel Database IAM dovranno essere trasferiti 9 al server LDAP che li renderà disponibili anche alle risorse. Si può pensare che questo ultimo passaggio possa essere realizzato subito dopo che tali modifiche sono state apportate al Database (evitando cosı̀ aumentare il tempo di incoerenza dei dati tra Fonti, Databse e LDAP). 7 Possiamo pensare difatti che due identità con stesso nome, cognome, codice fiscale e nate lo stesso giorno siano la stessa persona 8 Questo perchè l’Identità è già presente ma non ha associato il nuovo ruolo 9 Vedere il paragrafo 4.5 51 Figura 4.3: Sincronizzazione dei dati tra Fonti, DB e LDAP Come di puù quindi verificare dall’esempio dell’immagine 4.3, se un utente effettua una modifica in una fonte alle 11 di mattina, l’informazione potrà essere effettivamente visibile alla risorsa il giorno successivo. 52 4.5 Dati da replicare sul server LDAP Per vari motivi è fondamentale mantenere le informazioni in un database centralizzato, ma per interfacciarsi con le risorse, per la gestione dell’autenticazione e dell’autorizzazione centralizzate, diventa necessario replicare alcune informazioni su un server LDAP. Entriamo ora nel dettaglio della scelta degli attributi da replicare; per quel che riguarda gli attributi anagrafici: • IDIdentità • Cognome • Nome • Sesso • Codice Fiscale • Data nascita • Indirizzo di domicilio e di residenza • Mail • Telefoni • Fax • Titolo onorifico • Nazione di residenza, cittadinanza e domicilio • Luogo di residenza, cittadinanza e domicilio Oltre alle informazioni sopraelencate vanno aggiunti gli attributi necessari per la gestione dell’accesso alle risorse: • account • posixAccount • shadowAccount • sambaSamAccount 53 • radiusprofile Passiamo alle informazioni specifiche in base al ruolo: • Studente – Matricola – Anno di ultimo pagamento delle tasse – Anno di prima immatricolazione – Anno della laurea triennale – Anno della laurea specialistica – Corso di laurea di appartenenza (e Facoltà di conseguenza) • Dipendente – IDSGE – Codice SISA – Data Inizio – Data Fine – Codice Ruolo – Profilo e categoria – Stati del ruolo – Incarichi – Aree e settori – Dipartimenti, serivizi e sezioni e sedi collegate • Futura matricola – Matricola – Anno di prima immatricolazione – Corso di laurea di appartenenza (e Facoltà di conseguenza) • Professore a contratto – IDSGE – Codice SISA 54 – Data Inizio – Data Fine – Codice Ruolo – Profilo e categoria – Stati del ruolo – Aree e settori Da notare che si è deciso di replicare in LDAP molte informazioni contenute nel database (principalemente per motivi di efficienza), una diversa soluzione poteva essere quella di avere un numero ristretto di dati in LDAP e nel caso una applicazione avesse bisogno di ulteriori informazioni su un utente, “collegarla” direttamente al database implementando, per esempio, un web service per questo scopo. Questi dati verranno in seguito organizzati e gestiti opportunamente dal server LDAP che permetterà quindi l’accesso alle risorse. 55 Capitolo 5 Conclusioni In questa tesi si sono analizzati e formalizzati tutti gli elementi e le problematiche (o comunque quelli fondamentali) riguardanti l’Identity Management (Capitolo 1), successivamente si sono delinati i vincoli con cui il progetto dovrà avere a che fare (Capitolo 2) per in fine analizzare e giustificare le scelte fatte in sede di progettazione dell’architettura (Capitolo 3). Si sono applicati la maggior parte dei concetti visti nel corso di Basi di Dati (realizzazione di una Base di Dati, problematiche varie di sicurezza e affidabilità, linguaggio SQL) e in parte anche nei corsi si Sistemi Informativi e Reti di Calcolatori. Per quel che riguarda il progetto si è quindi realizzato un server IAM (sia il lato Database di gestione dell’Identità sia il lato LDAP per la gestione delle richieste dei servizi) che verificasse tutti i requisiti che deve possedere per essere: • funzionale • sicuro • affidabile • performante Dopo l’effettiva implementazione di tale progetto sia la gestione delle Identità verrà razionalizzata (andando quindi a risolvere le problematiche dell’attuale gestione) sia l’interfacciamento con i servizi subirà dei netti miglioramenti. 56 5.1 Sviluppi futuri La parte di gestione dell’Identità dell’Università di Parma, se pur migliorata attraverso questo studio, può ulteriormente essere migliorata in questi punti: • migliorare le comunicazioni tra le varie fonti e il database centralizzato • dare la possibilità di iscrizioni web o comunque servizi web per gestire parte del ciclo di vita Quel che riguarda il primo punto è sicuramente l’aspetto più interessante: difatti passare informazioni tramite file di testo dalle varie segreterie al centro di calcolo non è una soluzione ideale. Una soluzione sarebbe quella di introdurre i Web Service: un Web Service (servizio web) è un sistema software progettato per supportare l’interoperabilità tra diversi elaboratori su di una medesima rete[10]; la caratteristica fondamentale di un Web Service sta nell’offrire un’interfaccia software utilizzando la quale altri sistemi possono interagire con il Web Service stesso attivando le operazioni descritte nell’interfaccia tramite appositi messaggi inclusi in una busta: tali messaggi sono, solitamente, trasportati tramite il protocollo HTTP e formattati secondo lo standard XML. Proprio grazie all’utilizzo di standard basati su XML, tramite un’architettura basata sui Web Service (chiamata, con terminologia inglese, Service oriented Architecture - SOA) applicazioni software scritte in diversi linguaggi di programmazione e implementate su diverse piattaforme hardware possono quindi essere utilizzate, tramite le interfacce che queste espongono pubblicamente e mediante l’utilizzo delle funzioni che sono in grado di effettuare (i servizi che mettono a disposizione) per lo scambio di informazioni e l’effettuazione di operazioni complesse sia su reti aziendali come anche su Internet: la possibilità dell’interoperabilità fra diversi software (ad esempio, tra Java e Python) e diverse piattaforme hardware (come Windows e Linux) è resa possibile dall’uso di standard aperti. L’interazione tra servizi, fonti e server IAM avvanteggierebbe notevolmente tutta l’architettura. 57 Figura 5.1: Architettura con Web Service 58 Appendice A Glossario • Ruolo: insieme di privilegi all’interno del sistema dovute alla funzione che si ricopre all’interno dell’Università • Identità: entità unica che accede al sistema e che deve essere riconosciuta e alla quale possono essere associati diversi ruoli; quindi è l’insieme delle informazioni che caratterizzano un utente che sono le informazioni relative alla identità e ai diversi ruoli e/o attributi che questo può avere • Risorsa informatica (o brevemente risorsa) intendiamo un servizio reso disponibile ad un insieme di utenti registrati, ovvero di cui si conosce l’identità, che ha uno scopo preciso ed utile all’utente che ne fa uso, ed è accessibile attraverso mezzi informatici (ad esempio attraverso un computer). Esempi di risorse sono la posta elettronica, l’accesso ad un computer oppure l’accesso ad una rete locale (servizi ad esempio offerti dall’Università di Parma). • Server IAM: sistema software ed hardware centralizzato (indicativamente composto da un unico Database e da un sistema LDAP) che gestisce in modo ottimale il ciclo di vita delle Identità ed al quale le applicazioni si interfacciano gestendo perciò gli accessi, le autorizzazioni al sistema. 59 Appendice B Dump MySQL Di seguito riporto il dump del database IAM unificato, eseguibile in MySQL. −− −− −− −− −− MySQL dump 1 0 . 1 1 Host : l o c a l h o s t Database : u n i p r −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Server version 5.0.67 −0 ubuntu6 /∗ ! 4 0 1 0 1 /∗ ! 4 0 1 0 1 /∗ ! 4 0 1 0 1 /∗ ! 4 0 1 0 1 /∗ ! 4 0 1 0 3 /∗ ! 4 0 1 0 3 /∗ ! 4 0 0 1 4 /∗ ! 4 0 0 1 4 /∗ ! 4 0 1 0 1 /∗ ! 4 0 1 1 1 SET SET SET SET SET SET SET SET SET SET @OLD CHARACTER SET CLIENT=@@CHARACTER SET CLIENT ∗/ ; @OLD CHARACTER SET RESULTS=@@CHARACTER SET RESULTS ∗/ ; @OLD COLLATION CONNECTION=@@COLLATION CONNECTION ∗/ ; NAMES u t f 8 ∗/ ; @OLD TIME ZONE=@@TIME ZONE ∗/ ; TIME ZONE= ’+00:00 ’ ∗/ ; @OLD UNIQUE CHECKS=@@UNIQUE CHECKS, UNIQUE CHECKS=0 ∗/ ; @OLD FOREIGN KEY CHECKS=@@FOREIGN KEY CHECKS, FOREIGN KEY CHECKS=0 ∗/ ; @OLD SQL MODE=@@SQL MODE, SQL MODE=’NO AUTO VALUE ON ZERO’ ∗/ ; @OLD SQL NOTES=@@SQL NOTES, SQL NOTES=0 ∗/ ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘AREA‘ DROP TABLE IF EXISTS ‘AREA‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘AREA‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e d e l l a r e a d i d a t t i c a ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ D e s c r i z i o n e p e r e s t e s o ’ , PRIMARY KEY ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ Aree d i d a t t i c h e ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− 60 −− Dumping d a t a f o r t a b l e −− ‘AREA‘ LOCK TABLES ‘AREA‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘AREA‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘AREA‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘CARRIERA‘ DROP TABLE IF EXISTS ‘CARRIERA‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘CARRIERA‘ ( ‘ m a t r i c o l a ‘ char ( 6 ) NOT NULL COMMENT ’ M a t r i c o l a d e l l o s t u d e n t e ’ , ‘ a n n o p r i m a i m m a t r i c o l a z i o n e ‘ i n t ( 1 1 ) NOT NULL COMMENT ’ Anno d i prima i m m a t r i c o l a z i o n e ’ , ‘ d a t a l a u r e a t r i e n n a l e ‘ date default NULL COMMENT ’ Data d e l l a l a u r e a t r i e n n a l e ’ , ‘ d a t a l a u r e a s p e c i a l i s t i c a ‘ date default NULL COMMENT ’ Data d e l l a l a u r e a s p e c i a l i s t i c a ’ , ‘ c o r s o d i l a u r e a a p p a r t e n e n z a ‘ char ( 4 ) NOT NULL COMMENT ’ Corso d i l a u r e a d i a p p a r t e n e n z a ’ , PRIMARY KEY ( ‘ m a t r i c o l a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 5 ‘ ( ‘ c o r s o d i l a u r e a a p p a r t e n e n z a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 5 ‘ FOREIGN KEY ( ‘ c o r s o d i l a u r e a a p p a r t e n e n z a ‘ ) REFERENCES ‘CORSO LAUREA‘ ( ‘ c o d i c e ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ C a r r i e r e d e l l o s t u d e n t e ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘CARRIERA‘ LOCK TABLES ‘CARRIERA‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘CARRIERA‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘CARRIERA‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘CODICE RUOLO‘ DROP TABLE IF EXISTS ‘CODICE RUOLO‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘CODICE RUOLO‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e d e l r u o l o ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Nome p e r e s t e s o d e l r u o l o ’ , 61 PRIMARY KEY ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ C od ic e Ruolo ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘CODICE RUOLO‘ LOCK TABLES ‘CODICE RUOLO‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘CODICE RUOLO‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘CODICE RUOLO‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘CORSO LAUREA‘ DROP TABLE IF EXISTS ‘CORSO LAUREA‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘CORSO LAUREA‘ ( ‘ c o d i c e ‘ char ( 4 ) NOT NULL COMMENT ’ Co di c e a 4 c i f r e ’ , ‘ durata ‘ i n t ( 1 1 ) NOT NULL COMMENT ’ Durata i n a n n i ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Nome p e r e s t e s o ’ , ‘ t i p o c o r s o ‘ char ( 2 ) NOT NULL COMMENT ’ Tipo d i c o r s o ’ , ‘ f a c o l t a ‘ char ( 2 ) NOT NULL COMMENT ’ F a c o l t a d i a p p a r t e n e n z a ’ , PRIMARY KEY ( ‘ c o d i c e ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 3 ‘ ( ‘ t i p o c o r s o ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 4 ‘ ( ‘ f a c o l t a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 4 ‘ FOREIGN KEY ( ‘ f a c o l t a ‘ ) REFERENCES ‘FACOLTA‘ ( ‘ s i g l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 3 ‘ FOREIGN KEY ( ‘ t i p o c o r s o ‘ ) REFERENCES ‘TIPO CORSO‘ ( ‘ c o d i c e ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ C o r s i d i l a u r e a ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘CORSO LAUREA‘ LOCK TABLES ‘CORSO LAUREA‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘CORSO LAUREA‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘CORSO LAUREA‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘DATI LDAP‘ DROP TABLE IF EXISTS ‘DATI LDAP ‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t 62 SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘DATI LDAP ‘ ( ‘ cn ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Common name ’ , ‘ mail ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ Mail a s s e g n a t a ’ , ‘ p a s s w o r d i n i z i a l e ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ Password i n i z i a l e ’ , ‘ uid ‘ varchar ( 3 2 ) NOT NULL COMMENT ’UID ’ , ‘ uid number ‘ i n t ( 1 1 ) NOT NULL, PRIMARY KEY ( ‘ cn ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ D a t i u t i l i p e r l ’ ’ a c c e s s o a l l e r i s o r s e ( i n c o m p l e t o ) ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘DATI LDAP‘ LOCK TABLES ‘DATI LDAP ‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘DATI LDAP‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘DATI LDAP‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘DIPARTIMENTI‘ DROP TABLE IF EXISTS ‘DIPARTIMENTI ‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘DIPARTIMENTI‘ ( ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Nome d e l d i p a r t i m e n t o ’ , ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e d e l d i p a r t i m e n t o ’ , ‘ s e d e d i p a r t i m e n t o ‘ char ( 6 ) default NULL COMMENT ’ Sede d e l d i p a r t i m e n t o ’ , PRIMARY KEY ( ‘ s i g l a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 7 ‘ ( ‘ s e d e d i p a r t i m e n t o ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 7 ‘ FOREIGN KEY ( ‘ s e d e d i p a r t i m e n t o ‘ ) REFERENCES ‘ SEDI ‘ ( ‘ c o d i c e ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ D i p a r t i m e n t i d e l l U n i v e r s i t a d i Parma ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘DIPARTIMENTI‘ LOCK TABLES ‘DIPARTIMENTI‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘DIPARTIMENTI‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘DIPARTIMENTI‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e ‘FACOLTA‘ 63 −− DROP TABLE IF EXISTS ‘FACOLTA‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘FACOLTA‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e a 2 c i f r e ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Nome p e r e s t e s o ’ , PRIMARY KEY ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ F a c o l t a d e l l ’ ’ U n i v e r s i t a d i Parma ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘FACOLTA‘ LOCK TABLES ‘FACOLTA‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘FACOLTA‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘FACOLTA‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘IDENTITA‘ DROP TABLE IF EXISTS ‘IDENTITA ‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘IDENTITA ‘ ( ‘ i d i d e n t i t a ‘ varchar ( 3 2 ) NOT NULL COMMENT ’E−Mail a s s e g n a t a ’ , ‘ cognome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ Cognome ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Nome ’ , ‘ s e s s o ‘ char ( 1 ) NOT NULL COMMENT ’ S e s s o ’ , ‘ d a t a n a s c i t a ‘ date NOT NULL COMMENT ’ Data d i n a s c i t a ’ , ‘ c o d i c e f i s c a l e ‘ varchar ( 1 6 ) NOT NULL COMMENT ’ Co di c e f i s c a l e ’ , ‘ c a p d o m i c i l i o ‘ varchar ( 5 ) NOT NULL COMMENT ’CAP d o m i c i l i o ’ , ‘ c a p r e s i d e n z a ‘ varchar ( 5 ) NOT NULL COMMENT ’CAP r e s i d e n z a ’ , ‘ m a i l p e r s o n a l e ‘ varchar ( 3 2 ) default NULL COMMENT ’E Mail p e r s o n a l e ’ , ‘ t e l e f o n o r e s i d e n z a ‘ varchar ( 3 2 ) default NULL COMMENT ’ T e l e f o n o r e s i d e n z a ‘ t e l e f o n o d o m i c i l i o ‘ varchar ( 3 2 ) default NULL COMMENT ’ T e l e f o n o d o m i c i l i o ‘ t e l e f o n o c e l l u l a r e ‘ varchar ( 3 2 ) default NULL COMMENT ’ T e l e f o n o c e l l u l a r e ‘ f ax ‘ varchar ( 3 2 ) default NULL COMMENT ’ Fax ’ , ‘ v i a d o m i c i l i o ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ Via d o m i c i l i o ’ , ‘ v i a r e s i d e n z a ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ Via r e s i d e n z a ’ , ‘ t i t o l o o n o r i f i c o ‘ i n t ( 1 1 ) default NULL COMMENT ’ T i t o l o o n o r i f i c o ’ , ‘ s t a t o c i t t a d i n a n z a ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ S t a t o d i c i t t a d i n a n z a ’ ‘ s t a t o r e s i d e n z a ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ S t a t o d i r e s i d e n z a ’ , ‘ s t a t o d o m i c i l i o ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ S t a t o d i d o m i c i l i o ’ , ‘ s t a t o n a s c i t a ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ S t a t o d i n a s c i t a ’ , ‘ cn ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Common Name ’ , 64 ’, ’, ’, , ‘ l u o g o n a s c i t a ‘ char ( 6 ) NOT NULL COMMENT ’ Luogo d i n a s c i t a ’ , ‘ l u o g o r e s i d e n z a ‘ char ( 6 ) NOT NULL COMMENT ’ Luogo d i r e s i d e n z a ’ , ‘ l u o g o d o m i c i l i o ‘ char ( 6 ) NOT NULL COMMENT ’ Luogo d i d o m i c i l i o ’ , PRIMARY KEY ( ‘ i d i d e n t i t a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 0 ‘ ( ‘ t i t o l o o n o r i f i c o ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 1 ‘ ( ‘ s t a t o c i t t a d i n a n z a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 3 ‘ ( ‘ s t a t o r e s i d e n z a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 4 ‘ ( ‘ s t a t o d o m i c i l i o ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 5 ‘ ( ‘ s t a t o n a s c i t a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 6 ‘ ( ‘ cn ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 7 ‘ ( ‘ l u o g o n a s c i t a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 8 ‘ ( ‘ l u o g o r e s i d e n z a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 2 9 ‘ ( ‘ l u o g o d o m i c i l i o ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 8 ‘ FOREIGN KEY ( ‘ l u o g o r e s i d e n z a ‘ ) REFERENCES ‘LUOGO‘ ( ‘ c o d i c e i s t a t ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 9 ‘ FOREIGN KEY ( ‘ l u o g o d o m i c i l i o ‘ ) REFERENCES ‘LUOGO‘ ( ‘ c o d i c e i s t a t ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 0 ‘ FOREIGN KEY ( ‘ t i t o l o o n o r i f i c o ‘ ) REFERENCES ‘TITOLO ONORIFICO‘ ( ‘ c o d i c e ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 1 ‘ FOREIGN KEY ( ‘ s t a t o c i t t a d i n a n z a ‘ ) REFERENCES ‘STATO‘ ( ‘ nome ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 2 ‘ FOREIGN KEY ( ‘ s t a t o r e s i d e n z a ‘ ) REFERENCES ‘STATO‘ ( ‘ nome ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 3 ‘ FOREIGN KEY ( ‘ s t a t o r e s i d e n z a ‘ ) REFERENCES ‘STATO‘ ( ‘ nome ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 4 ‘ FOREIGN KEY ( ‘ s t a t o d o m i c i l i o ‘ ) REFERENCES ‘STATO‘ ( ‘ nome ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 5 ‘ FOREIGN KEY ( ‘ s t a t o n a s c i t a ‘ ) REFERENCES ‘STATO‘ ( ‘ nome ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 6 ‘ FOREIGN KEY ( ‘ cn ‘ ) REFERENCES ‘DATI LDAP ‘ ( ‘ cn ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 2 7 ‘ FOREIGN KEY ( ‘ l u o g o n a s c i t a ‘ ) REFERENCES ‘LUOGO‘ ( ‘ c o d i c e i s t a t ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 ROW FORMAT=DYNAMIC COMMENT= ’ I d e n t i t a d e l l U n i v e r s i t a d i Parma ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘IDENTITA‘ LOCK TABLES ‘IDENTITA ‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘IDENTITA‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘IDENTITA‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘INCARICHI ‘ DROP TABLE IF EXISTS ‘ INCARICHI ‘ ; 65 SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘ INCARICHI ‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e d e g l i i n c a r i c h i ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ D e s c r i z i o n e p e r e s t e s o ’ , PRIMARY KEY ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ I n c a r i c h i ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘INCARICHI ‘ LOCK TABLES ‘ INCARICHI ‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘INCARICHI ‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘INCARICHI ‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘LUOGO‘ DROP TABLE IF EXISTS ‘LUOGO‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘LUOGO‘ ( ‘ c o d i c e i s t a t ‘ char ( 6 ) NOT NULL COMMENT ’ C odi c e ISTAT ’ , ‘ c o d i c e a g e n z i a e n t r a t e ‘ char ( 4 ) NOT NULL COMMENT ’ Co di c e c a t a s t a l e ’ , ‘ d e s c r i z i o n e ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Nome p e r e s t e s o ’ , ‘ comune ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Nome p e r e s t e s o d e l comune ’ , ‘ p r o v i n c i a ‘ char ( 2 ) NOT NULL COMMENT ’ S i g l a a u t o m o b i l i s t i c a d e l l a p r o v i n c i a ’ , PRIMARY KEY ( ‘ c o d i c e i s t a t ‘ ) , KEY ‘ n e w f k c o n s t r a i n t ‘ ( ‘ p r o v i n c i a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t ‘ FOREIGN KEY ( ‘ p r o v i n c i a ‘ ) REFERENCES ‘PROVINCIA‘ ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ L o c a l i t a i t a l i a n i ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘LUOGO‘ LOCK TABLES ‘LUOGO‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘LUOGO‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘LUOGO‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘PROFILO‘ 66 DROP TABLE IF EXISTS ‘PROFILO ‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘PROFILO‘ ( ‘ s i g l a ‘ char ( 1 1 ) NOT NULL COMMENT ’ Co di c e d e l p r o f i l o ( 1 1 c a r a t t e r i ) ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ D e s c r i z i o n e p e r e s t e s o ’ , PRIMARY KEY ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ P r o f i l o d e l r u o l o ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘PROFILO‘ LOCK TABLES ‘PROFILO‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘PROFILO‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘PROFILO‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘PROVINCIA‘ DROP TABLE IF EXISTS ‘PROVINCIA ‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘PROVINCIA‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL, ‘ nome ‘ varchar ( 3 2 ) NOT NULL, PRIMARY KEY ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ E l e n c o d e l l e p r o v i n c e i t a l i a n e ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘PROVINCIA‘ LOCK TABLES ‘PROVINCIA‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘PROVINCIA‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘PROVINCIA‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘RUOLO‘ DROP TABLE IF EXISTS ‘RUOLO‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘RUOLO‘ ( ‘ i d s g e ‘ char ( 6 ) NOT NULL COMMENT ’ Co di c e IDSGE ’ , 67 ‘ s i s a ‘ char ( 6 ) NOT NULL COMMENT ’ Co di c e SISA ’ , ‘ d a t a i n i z i o ‘ date NOT NULL COMMENT ’ Data d i i n i z i o d e l r u o l o ’ , ‘ d a t a f i n e ‘ date default NULL COMMENT ’ Data d i t e r m i n a z i o n e d e l r u o l o ’ , ‘ c o d r u o l o ‘ char ( 2 ) NOT NULL COMMENT ’ C odi c e d e l r u o l o ’ , ‘ p r o f i l o ‘ char ( 2 ) NOT NULL COMMENT ’ P r o f i l o ’ , ‘ s t a t o r u o l o ‘ char ( 2 ) NOT NULL COMMENT ’ S t a t o r u o l o ’ , ‘ c a r r i e r a ‘ char ( 6 ) NOT NULL COMMENT ’ C a r r i e r a u n i v e r s i t a r i a ’ , ‘ i n c a r i c h i ‘ char ( 2 ) NOT NULL COMMENT ’ I n c a r i c h i ’ , ‘ a r e e ‘ char ( 2 ) NOT NULL COMMENT ’ Area d i d a t t i c a ’ , ‘ s e t t o r e ‘ char ( 2 ) NOT NULL COMMENT ’ S e t t o r e d i d a t t i c o ’ , ‘ d i p a r t i m e n t o ‘ char ( 2 ) NOT NULL COMMENT ’ D i p a r t i m e n t o d i a p p a r t e n e n z a ’ , ‘ s e r v i z i o ‘ char ( 2 ) NOT NULL COMMENT ’ S e r v i z i o ’ , ‘ s e z i o n e ‘ char ( 2 ) NOT NULL COMMENT ’ S e z i o n e ’ , ‘ i d e n t i t a ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ I d e n t i t a ’ , PRIMARY KEY ( ‘ i d s g e ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 0 ‘ ( ‘ c o d r u o l o ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 1 ‘ ( ‘ p r o f i l o ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 2 ‘ ( ‘ s t a t o r u o l o ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 4 ‘ ( ‘ c a r r i e r a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 5 ‘ ( ‘ i n c a r i c h i ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 6 ‘ ( ‘ a r e e ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 7 ‘ ( ‘ s e t t o r e ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 8 ‘ ( ‘ d i p a r t i m e n t o ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 1 9 ‘ ( ‘ s e r v i z i o ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 3 0 ‘ ( ‘ i d e n t i t a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 3 0 ‘ FOREIGN KEY ( ‘ i d e n t i t a ‘ ) REFERENCES ‘IDENTITA ‘ ( ‘ i d i d e n t i t a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 0 ‘ FOREIGN KEY ( ‘ c o d r u o l o ‘ ) REFERENCES ‘CODICE RUOLO‘ ( ‘ s i g l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 1 ‘ FOREIGN KEY ( ‘ p r o f i l o ‘ ) REFERENCES ‘PROFILO‘ ( ‘ s i g l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 2 ‘ FOREIGN KEY ( ‘ s t a t o r u o l o ‘ ) REFERENCES ‘STATI RUOLO‘ ( ‘ s i g l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 4 ‘ FOREIGN KEY ( ‘ c a r r i e r a ‘ ) REFERENCES ‘CARRIERA‘ ( ‘ m a t r i c o l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 5 ‘ FOREIGN KEY ( ‘ i n c a r i c h i ‘ ) REFERENCES ‘ INCARICHI ‘ ( ‘ s i g l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 6 ‘ FOREIGN KEY ( ‘ a r e e ‘ ) REFERENCES ‘AREA‘ ( ‘ s i g l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 7 ‘ FOREIGN KEY ( ‘ s e t t o r e ‘ ) REFERENCES ‘SETTORI‘ ( ‘ s i g l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 8 ‘ FOREIGN KEY ( ‘ d i p a r t i m e n t o ‘ ) REFERENCES ‘DIPARTIMENTI‘ ( ‘ s i g l a ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 1 9 ‘ FOREIGN KEY ( ‘ s e r v i z i o ‘ ) REFERENCES ‘ SERVIZIO ‘ ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ R u o l i r i c o p e r t i a l l i n t e r n o d e l l u n i v e r s i t a ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e ‘RUOLO‘ 68 −− LOCK TABLES ‘RUOLO‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘RUOLO‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘RUOLO‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘ SEDI ‘ DROP TABLE IF EXISTS ‘ SEDI ‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘ SEDI ‘ ( ‘ c o d i c e ‘ char ( 6 ) NOT NULL COMMENT ’ Co di c e a 6 c i f r e d e l l e s e d i ’ , ‘ d e s c r i z i o n e ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ D e s c r i z i o n e p e r e s t e s o ’ , ‘ i n d i r i z z o ‘ varchar ( 6 4 ) NOT NULL COMMENT ’ I n d i r i z z o d e l l a s e d e ’ , PRIMARY KEY ( ‘ c o d i c e ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ S e d i d e l l U n i v e r s i t a d i Parma ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘ SEDI ‘ LOCK TABLES ‘ SEDI ‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘ SEDI ‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘ SEDI ‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘SERVIZIO ‘ DROP TABLE IF EXISTS ‘ SERVIZIO ‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘ SERVIZIO ‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e p e r i l s e r v i z i o ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ D e s c r i z i o n e p e r e s t e s o ’ , ‘ s e d e s e r v i z i o ‘ char ( 6 ) NOT NULL COMMENT ’ Sede d e l s e r v i z i o ’ , PRIMARY KEY ( ‘ s i g l a ‘ ) , KEY ‘ n e w f k c o n s t r a i n t 8 ‘ ( ‘ s e d e s e r v i z i o ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 8 ‘ FOREIGN KEY ( ‘ s e d e s e r v i z i o ‘ ) REFERENCES ‘ SEDI ‘ ( ‘ c o d i c e ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ S e r v i z i ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e ‘SERVIZIO ‘ 69 −− LOCK TABLES ‘ SERVIZIO ‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘SERVIZIO ‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘SERVIZIO ‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘SETTORI‘ DROP TABLE IF EXISTS ‘SETTORI ‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘SETTORI‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e d e l s e t t o r e ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ D e s c r i z i o n e p e r e s t e s o ’ , PRIMARY KEY ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ S e t t o r i d i d a t t i c i ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘SETTORI‘ LOCK TABLES ‘SETTORI‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘SETTORI‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘SETTORI‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘SEZIONE‘ DROP TABLE IF EXISTS ‘SEZIONE ‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘SEZIONE ‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e p e r l e s e z i o n i ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ D e s c r i z i o n e p e r e s t e s o ’ , ‘ s e d e s e z i o n e ‘ char ( 6 ) default NULL COMMENT ’ Sede d e l l a s e z i o n e ’ , KEY ‘ n e w f k c o n s t r a i n t 9 ‘ ( ‘ s e d e s e z i o n e ‘ ) , CONSTRAINT ‘ n e w f k c o n s t r a i n t 9 ‘ FOREIGN KEY ( ‘ s e d e s e z i o n e ‘ ) REFERENCES ‘ SEDI ‘ ( ‘ c o d i c e ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ S e z i o n i ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘SEZIONE‘ 70 LOCK TABLES ‘SEZIONE ‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘SEZIONE‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘SEZIONE‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘STATI RUOLO‘ DROP TABLE IF EXISTS ‘STATI RUOLO ‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘STATI RUOLO‘ ( ‘ s i g l a ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e d e l l o s t a t o d e l r u o l o ’ , ‘ nome ‘ char ( 3 2 ) NOT NULL COMMENT ’ D e s c r i z i o n e p e r e s t e s o ’ , PRIMARY KEY ( ‘ s i g l a ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ S t a t i d e l r u o l o ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘STATI RUOLO‘ LOCK TABLES ‘STATI RUOLO‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘STATI RUOLO‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘STATI RUOLO‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘STATO‘ DROP TABLE IF EXISTS ‘STATO‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘STATO‘ ( ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ ’ ’Nome p e r e s t e s o ’ ’ ’ , ‘ c o d i c e 2 ‘ char ( 2 ) NOT NULL COMMENT ’ ’ ’ Co di ce a 2 c a r a t t e r i ’ ’ ’ , ‘ c o d i c e 3 ‘ char ( 3 ) NOT NULL COMMENT ’ ’ ’ Co di ce a 3 c a r a t t e r i ’ ’ ’ , ‘ codice IANA ‘ char ( 3 ) NOT NULL COMMENT ’ ’ ’ Co di ce IANA ’ ’ ’ , ‘ codice ISTAT ‘ char ( 3 ) NOT NULL COMMENT ’ ’ ’ Co di ce ISTAT ’ ’ ’ , ‘ c o d i c e a g e n z i a e n t r a t e ‘ char ( 3 ) NOT NULL COMMENT ’ ’ ’ Co di ce d e l l ’ ’ A g e n z i e d e l l e E n t r a t e ’ ’ ’ , PRIMARY KEY ( ‘ nome ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ S t a t i s o v r a n i ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘STATO‘ 71 LOCK TABLES ‘STATO‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘STATO‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘STATO‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘TIPO CORSO‘ DROP TABLE IF EXISTS ‘TIPO CORSO ‘ ; SET @ s a v e d c s c l i e n t = @@character set client ; SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘TIPO CORSO‘ ( ‘ c o d i c e ‘ char ( 2 ) NOT NULL COMMENT ’ Co di c e a 2 c a r a t t e r i ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’ Tipo p e r e s t e s o ’ , PRIMARY KEY ( ‘ c o d i c e ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ Tipo d i c o r s o d i l a u r e a ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘TIPO CORSO‘ LOCK TABLES ‘TIPO CORSO‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘TIPO CORSO‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘TIPO CORSO‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; −− −− T a b l e s t r u c t u r e f o r t a b l e −− ‘TITOLO ONORIFICO‘ DROP TABLE IF EXISTS ‘TITOLO ONORIFICO ‘ ; = @@character set client ; SET @ s a v e d c s c l i e n t SET c h a r a c t e r s e t c l i e n t = u t f 8 ; CREATE TABLE ‘TITOLO ONORIFICO‘ ( ‘ c o d i c e ‘ i n t ( 1 1 ) NOT NULL COMMENT ’ Co di c e numerico i n c r e m e n t a l e ’ , ‘ nome ‘ varchar ( 3 2 ) NOT NULL COMMENT ’Nome d e l t i t o l o o n o r i f i c o ’ , PRIMARY KEY ( ‘ c o d i c e ‘ ) ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 COMMENT= ’ T i t o l o o n o r i f i c o d e l l e I d e n t i t a ’ ; SET c h a r a c t e r s e t c l i e n t = @ s a v e d c s c l i e n t ; −− −− Dumping d a t a f o r t a b l e −− ‘TITOLO ONORIFICO‘ LOCK TABLES ‘TITOLO ONORIFICO‘ WRITE; /∗ ! 4 0 0 0 0 ALTER TABLE ‘TITOLO ONORIFICO‘ DISABLE KEYS ∗/ ; /∗ ! 4 0 0 0 0 ALTER TABLE ‘TITOLO ONORIFICO‘ ENABLE KEYS ∗/ ; UNLOCK TABLES ; 72 /∗ ! 4 0 1 0 3 SET TIME ZONE=@OLD TIME ZONE ∗/ ; /∗ ! 4 0 1 0 1 /∗ ! 4 0 0 1 4 /∗ ! 4 0 0 1 4 /∗ ! 4 0 1 0 1 /∗ ! 4 0 1 0 1 /∗ ! 4 0 1 0 1 /∗ ! 4 0 1 1 1 SET SET SET SET SET SET SET SQL MODE=@OLD SQL MODE ∗/ ; FOREIGN KEY CHECKS=@OLD FOREIGN KEY CHECKS ∗/ ; UNIQUE CHECKS=@OLD UNIQUE CHECKS ∗/ ; CHARACTER SET CLIENT=@OLD CHARACTER SET CLIENT ∗/ ; CHARACTER SET RESULTS=@OLD CHARACTER SET RESULTS ∗/ ; COLLATION CONNECTION=@OLD COLLATION CONNECTION ∗/ ; SQL NOTES=@OLD SQL NOTES ∗/ ; −− Dump c o m p l e t e d on 2009−02−03 1 6 : 3 2 : 2 2 73 Appendice C Istruzioni per importare il database dallo script Per provare il DB (attraverso il dump dell’appendice B è ovviamente necessario innanzitutto scaricare 1 ed installare MySQL (sulla macchina in cui è stato provato, con sistema operativo Ubuntu 8.10, la procedura è veramente banale2 ) e successivamente da shell digitare: • se vogliamo cancellare un precedente database con lo stesso nome: mysqladmin drop unipr -u root -p • importare quindi il database: mysql unipr -u root -p < nome_del_file_dump.sql 1 All’indirizzo http://dev.mysql.com/downloads/mysql/5.1.html sono presenti i download per la versione 5.1 di MySQL 2 Basta difatti installare il pacchetto mysql-server 74 Bibliografia [1] Marco Atzeni, Stefano Ceri, Stefano Paraboschi, and Riccardo Torlone. Basi di dati - Modelli e linguaggi di interrogazione. McGraw-Hill, 2002. [2] Nello Coppeto. Dbms a confronto: panoramiche sui diversi scenari di sviluppo dei server database, 2007. [3] Giulio Destri. Introduzione ai sistemi informativi aziendali. Monte Università Parma Editore, 2007. [4] Maria Laura Mantovani. Identificazione delle persone. http://wiki.unimore.it/ mediawiki/index.php/Identificazione_delle_persone. [5] Maria Laura Mantovani. Identity and access management. marialaura. [email protected]. [6] Microsoft. Serie microsoft gestione di identità e accessi. http://www.microsoft. com/italy/technet/security/topics/identity/p1fund_4.mspx. [7] Marco Panella. Identity and access management (iam) e authentication and authorization infrastructure (aai) in ambiente federato. www.siti.unipr.it/?download= IAM_AAI_20080512.ppt. [8] Avi Silberschatz. Database System Concepts. McGraw-Hill, 2006. [9] Wikipedia. Identity management. http://en.wikipedia.org/wiki/Identity_ management. [10] Wikipedia. Web service. http://it.wikipedia.org/wiki/Web_service. 75