Utenti e privilegi del database - 1 Root è l’utente amministratore predefinito, ma possiamo definire altri utenti con diritti più o meno limitati a seconda delle funzioni che devono svolgere. MySQL considera il nome utente/password e il nome della macchina (server locale se omesso) per la fase di identificazione. Tutti i dati relativi ai privilegi vengono registrati nel database creato automaticamente in fase di installazione del server e denominato mysql. Un utente può essere creato (*) esplicitamente, inserendo un record relativo all’utente nella tabella mysql.user (database mysql, tabella user): mysql> INSERT INTO mysql.user (host,user,password) VALUES('%','gigi',PASSWORD('pwd')); (*) a partire dalla versione 5.0.3 di MySQL, per creare un utente è possibile anche utilizzare l’istruzione CREATE USER nome_utente IDENTIFIED BY 'password' CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 1 Utenti e privilegi del database - 2 … e un record nella tabella mysql.db: mysql> INSERT INTO mysql.db (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv) VALUES ('%','esami_studenti',’gigi', 'Y', ‘N', ‘N', ‘N', 'N', 'N'); Infine è necessario ricaricare in memoria la lista dei diritti aggiornata: mysql> FLUSH PRIVILEGES; Dopo queste operazioni l’utente “gigi” potrà collegarsi al solo database “esami_studenti” per visualizzare i dati. NOTA: per collegarsi ad una macchina diversa da quella locale bisogna definire il parametro host (-h) all’avvio del client: C:\>mysql -h nome_macchina -u nome_utente -p CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 2 Utenti e privilegi del database - 3 Possiamo creare un utente in modo implicito con l’istruzione GRANT: mysql> GRANT SELECT ON video_xxx.* TO gigi@localhost IDENTIFIED BY ‘pwd’; In questo caso non è necessario eseguire il FLUSH in quanto l’aggiornamento è immediato. L’asterisco (.*) indica “tutte le tabelle”, se avessimo indicato l’asterisco anche come nome del database, il privilegio sarebbe stato concesso per “tutti i database” (*.*). E’ possibile utilizzare la clausola “ALL [PRIVILEGES]” al posto della “SELECT” per consentire “tutte le operazioni” sul database. Una volta concessi tutti i privilegi ad un utente, è possibile visulizzarli col comando: mysql> SHOW GRANTS FOR gigi; CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 3 Utenti e privilegi del database - 4 Per togliere un privilegio ad un utente usiamo l’istruzione REVOKE: mysql> REVOKE INSERT ON video_xxx.* FROM gigi@localhost; Per rimuovere un utente: mysql> DELETE FROM mysql.user WHERE user='gigi' AND host='localhost'; mysql> FLUSH PRIVILEGES; Oppure, solo dopo avere rimosso tutti i privilegi per l’utente: mysql> DROP USER gigi@localhost; Altri comandi, dall’ovvio significato, relativi all’utenza: mysql> SELECT CURRENT_USER(); mysql> SET PASSWORD FOR 'gigi'@'localhost'=PASSWORD(’pwd2'); mysql> SELECT host, user FROM mysql.user; Nota: se al posto del nomehost mettiamo ‘%’, concediamo il privilegio per tutti gli host. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 4 Esercitazione 4.1 Create l’utente mionome@localhost, con i seguenti privilegi sul database “video_xxx”: 1 – Selezione di dati da tutte le tabelle 2 – Possibilità di aggiungere, aggiornare ed eliminare (INSERT, UPDATE, DELETE) dati dalle tabelle “attori” ed “registi” Collegatevi al database con l’utenza “mionome” ed aggiornate il nome dell’attore con codice 2 a ‘George’. Inserite un nuovo regista nel database: Codice_regista: 50 Cognome: Nero Nome: Franco CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 5 Salvataggio e ripristino dei dati 1 In MySQL il database è memorizzato in normali files, per cui farne il backup è relativamente semplice. 1-Possiamo semplicemente fare una copia di tutta la cartella MySQL. 2-Possiamo anche usare il comando mysqldump: C:\>mysqldump video_xxx -u root -p --tab= "C:\Programmi\MySQL\MySQL Server 4.1\data\backups“ (--tab consente di creare per ogni tabella due files, DDL e dati, nella cartella indicata) C:\backups>mysqldump --all-databases -u root -p > completo.dmp C:\backups>mysqldump video_xxx -u root -p > video.dmp NOTA: per specificare la password (in modo da schedulare il salvataggio) è possibile utilizzare l’opzione “--password=password_utente” al posto di “-p” che è interattivo. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 6 Salvataggio e ripristino dei dati 2 Per effettuare il backup solo di alcune tabelle, è possibile usare l’opzione --tables: C:\backups>mysqldump video_xxx --tables attori prestiti -u root p > attori_prestiti.dmp Per ripristinare i dati, basta passare al comando mysql il file contenente DDL e dati. Per testare la funzione, eliminiamo e ripristiniamo la tabella “prestiti”: 1-facciamo il backup della tabella “prestiti”: C:\backups>mysqldump video_xxx --tables prestiti -u root -p > prestiti.dmp 2-cancelliamo la tabella: mysql>drop table prestiti; 3-ripristiniamo la tabella: C:\backups>mysql video_xxx -u root -p < prestiti.dmp; CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 7 Import dei dati - 1 Per caricare dati esterni in MySQL è possibile utilizzare due strumenti: 1. il comando mysqlimport, lanciato dalla shell del sistema operativo. Per ogni file di testo indicato sulla linea di comando, mysqlimport non tiene conto della estensione ed usa la parte rimanente per determinare il nome della tabella nella quale importare il dati del file di testo. Creiamo un file di testo di nome attori.txt, nella cartella c:\backups, col seguente contenuto: 51;Marlon;Brando 52;Kirk;Douglas ed un altro file di nome registi.txt col seguente contenuto: 51;Oliver;Stone 52;Sergio;Leone Per importare i dati nel database possiamo procedere nel seguente modo: CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 8 Import dei dati - 2 C:\backups>mysqlimport video_xxx -u root -p --fields-terminated-by=";" c:\backups\attori.txt C:\backups>mysqlimport video_xxx -u root -p --fields-terminated-by=";" c:\backups\registi.txt ovviamente, l’opzione “--fields-terminated-by” consente di specificare il separatore dei campi che, altrimenti, sarebbe il tabulatore (\t). 2. L’altro sistema per importare i dati è quello di utilizzare il comando SQL “LOAD DATA”. Creiamo un altro file di nome attori2.txt col seguente contenuto: 60;Sergio;Castellitto 61;Jane;Fonda Per importare i dati nel database possiamo eseguiamo: mysql> LOAD DATA INFILE ‘C:\\backups\\attori2.txt' INTO TABLE attori FIELDS TERMINATED BY ';'; CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 9 Esercitazione 4.2 1. Effettuare il backup completo del database “mysql” nel file “mysql.dmp” 2. Effettuare il backup delle tabelle “clienti”, “attori” e “film” del database “video_xxx” nel file “video.dmp” 3. Creare il database “db_video” 4. Ripristinare nel database appena creato le tabelle “clienti”, “attori” e “film” 5. Effettuare il backup del database “db_video” nella cartella C:\backups facendo in modo che per ogni tabella vi siano due files, uno per il DDL ed un altro per i dati; 6. Il file di testo registi2.txt contiene due righe: 75;Franco;Zeffirelli 76;Roberto;Benigni Scrivere i comandi per importare i dati nella tabella “registi” del database “video_xxx” (via S.O. e via SQL) CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005 10