|
Appunti informatica |
|
Visite: 1962 | Gradito: | [ Medio appunti ] |
Leggi anche appunti:Database & MysqlDatabase & Mysql La gestione dei dati è da sempre una delle attività più I Database RelazionaliI Database Relazionali allora cosa sono questi famigerati Database relazionali? Piccola storia dei database assolutamente incompletaPiccola storia dei database assolutamente incompleta Probabilmente il più glorioso |
Database & Mysql
La gestione dei dati è da sempre una delle attività più delicate per qualsiasi organizzazione, la possibilità di memorizzare le informazioni e gestirle in modo efficiente è ormai un bene primario per molte attività- Per questi motivi ogni realtà produttiva, dal piccola ufficio alla grande azienda, oggi dispone di un proprio sistema informativo, ossia di un insieme di strutture e procedure il cui compito è quello di trattare le informazioni necessarie allo svolgimento delle attività.
Per capire l'importanza che una gestione efficiente delle informazioni può avere nella nostra vita quotidiana basti pensare ad alcune delle attività che svolgiamo giornalmente: l'accesso a conti correnti bancari, la consultazione di elenchi o la prenotazione di beni e servizi.
Per definizione un sistema informativo ha il compito dì memorizzare ed organizzare le informazioni indipendentemente dallo strumento utilizzato. Qualche anno fa i mezzi utilizzati per registrare dati erano costituiti fondamentalmente da archivi cartacei, come gli schedar! delle biblioteche o gli registri ana-grafici del nostro comune. Naturalmente oggi sarebbe impensabile gestire grandi quantità di informazioni senza il supporto di tecnologie informatiche, per questo motivo oramai praticamente qualsiasi sistema informativo viene realizzato tramite l'ausilio di sistemi informatici.
Se finora abbiamo utilizzato in modo quasi intercambiabile i termini dato ed informazione a questo punto si
rende necessaria una precisazione; per le attività che ci interessano abbiamo bisogno di trattare informazioni, ma tramite sistemi informatici queste vengono rappresentate per mezzo dei dati.
Per chiarire ulteriormente le differenza tra i due concetti riportiamo una delle varie definizioni:
informazione: 'notizia, dato o elemento che consente di avere conoscenza più o meno esatta dì fatti, situazioni,modi di essere';
dato: 'ciò che è immediatamente presente alla conoscenza, prima di ogni elaborazione';
questo evidenzia che le informazioni costituiscono una interpretazione dei dati mediante le conoscenze precedentemente acquisite.
Naturalmente mediante l'ausilio di strumenti formali (sia manuali che automatici) è possibile manipolare convenientemente solo i dati e per poter ricostruire le informazioni che intendono rappresentare si ricorre ad una loro organizzazione e correlazione in quelle che vengono definite basi di dati (database). L'informatica, scienza nata con lo scopo dì sviluppare tecnologie per il trattamento automatico delle informazioni, ha da sempre dato molta importanza alla realizzazione di strumenti specifici per la gestione di basi di dati, tali software prendono il nome dì DBMS. Con il termine DBMS (Data Base Management System) ci si riferisce a tutti quei sistemi nati specificatamente per la gestione dei dati e che, rispetto altri metodi di memorizzazione, sono in grado di offrire diversi vantaggi:
affidabilità: in quanto è il sistema ad occuparsi della salvaguardia dei dati, e di attivare particolari funzioni di ripristino dei dati in caso di malfunzio-namenti hardware o software;
privatezza: il sistema è in grado di garantire che l'accesso e la modifica dei dati possa essere effettuato solo dagli utenti abilitati;
condivisione: i dati possono essere utilizzati dagli utenti che ne hanno necessità, questo permette di centralizzare le informazioni ed evitare ridondanze dei dati;
efficienza: i sistemi di gestione dì database sono strumenti altamente ottimizzati, al loro interno sono implementati algoritmi molto sofisticati per permettere un rapido accesso ai dati;
Ma uno dei vantaggi più rilevanti, introdotti dai DBMS rispetto ad altri metodi di memorizzazione, il più semplice dei quali è rappresentato dai file, è senza dubbio l'indipendenza dei dati, resa possibile dalla strutturazione a livelli dei DBMS.
Grazie a questa proprietà, gli utenti possono accedere ai dati contenuti nel database utilizzando un alto livello di astrazione, senza cioè dover conoscere come i dati sono organizzati all'interno del database, né tanto meno la loro collocazione fisica sui supporti di memorizzazione.
L'accesso ai dati avviene solo tramite interazione con il DBMS attraverso opportuni linguaggi
Nel corso degli anni sono stati sviluppati diversi modelli per la gestione di basi di dati, ma quello che ha avuto il maggior successo si basa sul modello relazionale, introdotto da E.F. Codd nel 1970. Il modello relazionale utilizza il concetto intuitivo di tabella, un formalismo che consente dì memorizzare record a struttura fissa. In genere un database è formato da diverse tabelle, che vengono poi messe in relazione in modo da ricostruire le informazioni che è necessario rappresentare.
Uno dei fattori principali che ha contribuito alla diffusione del modello relazionale, oltre che la semplicita' con la quale si creano i collegamenti tra i dati che ci interessano, è stata la disponibilità di un linguaggio standard per le interazioni con il DBMS relazionale IRDBMS, Relatìonal DBMS). Il linguaggio in questione è 'SQL (Structured Ouery Languagef ed è stato originariamente sviluppato da IBM per il suo sistema relazionale System R. Successivamente il linguaggio è stato adottato da altri sistemi software e nel 1986 è stato standardizzato dall'ANSI (American National Standard^ Instituteì, diventando cosi il linguaggio universale per l'interazione con i DBMS.
MySQL (www.rnysql.com ) è uno dei database server più conosciuti nel mondo Linux e dell'OpenSource in genere. Per la rappresentazione dei dati utilizza il modello relazionale, anche se, volendo essere precisi, non potrebbe essere considerato un RDMBS in quanlo non supporta alcune delle caratteristiche definite da Codd. Questo non vuoi dire che non si possa pensare a MySQL come ad un sistema in grado di gestire database complessi e corposi. Nel caso in cui dovessimo realizzare delle applicazioni più 'critiche' sarà possibile includere delle funzionalità, come il supporto per le transazioni e le foreign keys, non presenti nelle installazioni di default.
MySQL utilizza il paradigma client/server, che in pratica si traduce nel suddividere le entità coinvolte nell'uti-lizzo dei dati in due categorie: il server rappresenta un processo specializzato che rimane sempre in esecuzione nel sistema (daemon) e che ha il compito di manipolare i dati; mentre i client sono rappresentati dalle applicazioni che utilizzano i dati, ma che non possono manipolarli direttamente.
L'idea fondamentale alla base dei sistemi client/server è che i client non accedono direttamente ai supporti di memorizzazione dei dati, ma si limitano ad effettuare delle richiesta al server che le eseguirà e ne restituirà i risultati.
Questo, tra gli altri vantaggi, permette di implementare nel server sofisticate funzioni di manipolazione dei dati, senza incrementare la complessità dei client, e di definire precise politiche di accesso ai database.
Tra i pregi di MySQL figurano certamente la velocità, la disponibilità per qualsiasi piattaforma, l'enorme numero di applicazioni disponibili e ovviamente la possibilità di essere utilizzato gratuitamente. Proprio per questi motivi, MySQL, viene incluso in qualsiasi distribuzione Linux, ma se non dovesse essere presente nel vostro sistema vediamo insieme quali sono i passi da seguire per installarlo. Per la nostra prova utilizzeremo i sorgenti, per poi compilarli in modo da scegliere solo i componenti a noi necessari.
Naturalmente il primo passo da compiere sarà quello di collegarci all'homepage di MySQL (https://www.mysql.com) e prelevare i sorgenti seguendo il link 'Download'; al momento in cui scrivo sono disponibili la versione 3.23.49 (stabile) e la versione 4.0.1 (sviluppo). Preleviamo l'ultima versione stabile disponibile, precisamente il file chiamato mysql-3.23.49.tar.gz e decomprimiamolo tramite il comando:
tar -zxf mysql-3.23.49.tar.gz
Quindi spostiamoci nella directory appena creata ed iniziamo la fase di configurazione dei sorgenti:
./configure --prefix-/usr/local/mysql --without-debug --without-bench
con questo indichiamo che intendiamo installare il sistema nella directory /usr/local/mysql, che non vogliamo includere le informazioni necessarie al debug e che non vogliamo compilare la suite di benchmark. Le impostazioni di default andranno bene per la maggior parte delle applicazioni, comunque, per avere una lista di tutte le opzioni disponibili, possiamo utilizzare il comando:
./configure --help | less
Una volta terminata la fase di configurazione, passiamo alla compilazione vera e propria tramite il comando:
make
programmi appena |
e successivamente installiamo creati:
make install
dopo aver installato i binar! dovremo spostarci nella directory di installazione (/usr/local/mysql) e settare i permessi per le varie directory.
Per motivi di sicurezza vi consiglio di non far eseguire il daemon con i permessi di root, ma di creare appositamente un nuovo gruppo ed un nuovo utente. La soluzione più semplice è quella di creare il gruppo e l'utente mysql, in modo da utilizzare le impostazioni di default già presenti nei file di avvio di MySQL. I comandi da eseguire sono:
groupadd mysql
useradd -g mysql mysql
per definire i permessi di accesso alle directory della struttura di MySQL eseguiamo i comandi:
chown -R root /usr/local/mysql
chown -R mysql /usr/1ocal/mysql/var
chgrp -R mysql /usr/local/mysql
a questo punto possiamo inizializzare le tabelle contenenti i permessi di accesso al DBMS, per farlo utilizziamo lo script:
./bin/mysql_install_db
Ultimata questa fase, se tutto è andato per il verso giusto, siamo pronti ad utilizzare il nostro nuovo DBMS, che possiamo avviare con il comando:
./bin/safe_mysqld &
Prima di vedere come utilizzare il database per memorizzare e manipolare i dati, dovremmo avere ben chiare le idee riguardo i metodi utilizzati da MySQL per la gestione degli accessi.
MySQL, per garantire la riservatezza dei dati contenuti nei database, utilizza un sistema di ACL (Access Control List), in modo che sia possibile specificare, per ogni utente, esattamente le operazioni che gli è consentito svolgere. L'autenticazione è gestita attraverso 3 tabelle: user, db e host.
Il primo controllo che viene svolto dal DBMS, non appena riceve un tentativo di connessione, consiste nel verificare il nome dell'utente e IP di provenienza. In questo modo è possibile diversificare gli utenti (ed i relativi permessi) anche in base all'host di provenienza e non solo mediante la classica coppia username/password.
In pratica i dati contenuti nella tabella user servono a definire i permessi globali che vengono assegnati ai vari utenti, che comunque possono essere ristretti, in relazione ai diversi database, mediante informazioni aggiuntive contenute nelle altre tabelle. Nella tabella user, per ogni utente da configurare, andranno specificati gli host di provenienza, lo username, la password e le operazioni che gli è consentito svolgere (select, insert, update,).
Vediamo in dettaglio le informazioni che è possibile specificare:
host: indica i nomi degli host o gli IP autorizzati alla connessione, può contenere le wildcard '%' e '_'. La prima viene utilizzata per indicare zero o più Decorrenze di caratteri qualsiasi, la seconda per indicare l'occorrenza di un singolo carattere. Inoltre, nelle ultime versioni di MySQL, è possibile specificare anche una coppia IP/netmask, in modo da garantire l'accesso a tutti gli host di una sottorete. La mancanza di valori per questo campo, indica che le informazioni circa l'host di provenienza dovranno essere verificate attraverso la tabella host.
user: indica i nomi degli utenti autorizzati alla connessione. In questo campo non sono accettate le wildcard, e se il campo viene lasciato vuoto il sistema accetterà le richieste provenienti da qualsiasi utente.
password: contiene le password, in formato codificato, degli utenti autorizzati. Se questo campo non viene riempito, il sistema accetterà gli utenti che si collegheranno senza specificare la password, ma impedirà l'accesso a coloro i quali ne forniranno una.
select_priv,, file_priv: campi booleani, accettano i valori 'Y' o 'N', vengono utilizzati per indicare quali operazioni gli utenti possono richiedere al DBMS.
Una volta che l'utente è stato riconosciuto dal sistema viene attivata la seconda fase di autenticazione, quella che stabilisce quali operazioni l'utente può svolgere e su quali database. In questa fase le tabelle coinvolte sono: db e host. In particolare nella tabella db sono contenuti i campi:
host: il cui significato è analogo all'omonimo campo della tabella user, ma limitatamente al database specificato dal campo db;
db: indica il nome del database al quale le informazioni di autorizzazione si riferiscono. Possono essere utilizzate le wildcard '%'e '.'(con lo stesso significato visto precedentemente), mentre se il campo viene lasciato vuoto le impostazioni verranno applicate a qualsiasi database;
user: il cui significato è analogo all'omonimo campo della tabella user, ma limitatamente al database specificato dal campo db;
select_priv, . grant_priv: sono dei campi booleani, accettano i valori 'Y' o 'N', utilizzati per indicare quali operazioni gli utenti possono svolgere sul database specificato dal campo db;
La tabella host contiene i campi:
host: il cui significato è simile all'omonimo campo della tabella db, infatti in questo caso un campo vuoto indica qualsiasi host;
db: il cui significato è analogo all'omonimo campo della tabella db;
select priv, . grant priv: i cui significati sono analoghi agli omonimi della tabella user, ma limitatamente al database specificato dal campo db;
Abbiamo visto quali siano le funzioni di un DBMS, soffermandoci in particolare su MySQL, probabilmente il database più utilizzato nella comunità OpenSource. Le sue caratteristiche di snellezza, semplicità ed efficienza lo rendono uno strumento ideale per la maggior parte di applicazioni di gestione di database.
Appunti su: |
|