Amministrazione di MySQL

L’installazione di MySQL comprende generalmente l’uso di diversi pacchetti (o compilazione delle relative componenti):
mysql-server – Il server vero e proprio
mysql-client – Il client a riga di comando
mysql-devel – Librerie. Da installare solo se si devono compilare software che si appoggiano a MySQL

Il file di configurazione è /etc/my.cnf.
Il comandi fondamentali sono:
mysqld – Il server MySQL
mysql – Il client a riga di comando. Per usarlo bisogna conoscere i principi di SQL.
mysqladmin – Tool di gestione e amministrazione del sistema
mysqldumpmysqlhotcopy – Strumenti per il backup di un database

La gestione dei permessi sui database di MySQL è fondamentale.
Di default esiste l’utente root senza password che da localhost può gestire completamente MySQL. Notare che questo utente NON è l’utente root di sistema, le sue credenziali, come quelle di tutti gli altri utenti di MySQL, sono presente nel database predefinito mysql.
In termini di gestione delle password e degli accessi si consiglia:
– Impostare una password per l’utnete root.
– Impostare login/password diverse per ogni applicativo o sito web che lavora su un singolo database, in modo che questo utente possa lavorare solo su quello specifico db.
– Se da applicativo o interfaccia web si devono solo interrogare dati, bastano i permessi di SELECT, se si devono poterli modificare, dovrebbero bastare permessi di SELECT, UPDATE, INSERT, DELETE. Gli altri permessi servono per modificare la struttura di un database, impostare indici, impostare permessi ecc. e generalmente non è necessario attivarli, salvo quando l’applicazione lo richieda esplicitamente.
– La porta su cui ascolta MySQL (TCP 3306) non dovrebbe mai essere esposta ad Internet, è sufficiente che sia accessibile dall’host su cui gira l’applicativo che usa il DB server (esempio un server web con pagine php).

Esistono diversi metodi per eseguire il baclup dei dati di un database.
Se questi non sono troppi, uno dei più comodi è usare mysqldump:
mysqldump --all-database > backup.sql -u root -p
Il file backup.sql contiene tutte le query necessarie per ristabilire un database:
mysql < backup.sql -u root -p

E’ possibile abilitare interessanti funzioni di logging operando su /etc/mycnf:
log=/var/log/mysql/mysqld.log – Log generale
log-error=/var/log/mysql/mysqld-error.log – Errori
log-slow-queries=/var/log/mysql/mysqld-slow.log – Query lente

Installazione di MySQL

Installazione di MySQL tramite RPM e compilazione dei sorgenti.

E’ possibile effettuare il download di MySQL, sia in formato RPM che in formato sorgente disponibile per diverse piattaforme, presso il sito del produttore www.mysql.com oppure tramite uno dei suo mirror.

INSTALLAZIONE TRAMITE COMPILAZIONE DEI SORGENTI
L’installazione di MySql tramite sorgenti consiste nell’effettuare i tre classici step configure, make e make install. Prima di procedere è necessario creare l’utente ed il relativo gruppo che verrà utilizzato per fare girare il server:
root@Joker:/software# groupadd mysql
Creazione del gruppo
root@Joker:/software#
useradd -g mysql mysql
Creazione dell’utente

SCOMPATTAZIONE
Per prima cosa si procede alla scompattazione dei sorgenti:
root@Joker:/software# tar -xzvf mysql-4.0.15a.tar.gz
mysql-4.0.15a/
mysql-4.0.15a/bdb/
mysql-4.0.15a/bdb/db/
mysql-4.0.15a/bdb/db/db_upg.c
[…]

CONFIGURAZIONE
Una volta scompattati i sorgenti è possibile configurare le opzioni di installazione tramite lo script configure:
root@Joker:/software# cd mysql-4.0.15a
root@Joker:/software/mysql-4.0.15a#
./configure --help
Tramite l’opzione help è possibile visualizzare quali sono le opzioni disponibili per personalizzare al meglio l’installazione del server
root@Joker:/software/mysql-4.0.15a# ./configure --prefix=/usr/bin
checking build system type… i586-pc-linux
checking host system type… i586-pc-linux

In questo caso viene indicato di utilizzare il percorso /usr/bin per installare gli eseguibili del server

COMPILAZIONE
Una volta eseguita la configurazione è necessario compilare i sorgenti:
root@Joker:/software/mysql-4.0.15a# make
cd libmysql; make link_sources
make[1]: Entering directory `/software/mysql-4.0.15a/libmysql’
[…]

INSTALLAZIONE
L’ultimo passo da compiere è infine l’installazione:
root@Joker:/software/mysql-4.0.15a# make install

Una volta installato il software si devono creare le tabelle di grant, contententi i permessi per gli utenti che devono accedere al MySql:
root@Joker:/# mysql_install_db
Preparing host table
Preparing user table
Preparing func table
Preparing tables_priv table
Preparing columns_priv table
Installing all prepared tables

INSTALLAZIONE TRAMITE RPM
I pacchetti disponibili per il download e l’installazione sono diversi, ma quelli strettamente necessari all’installazione di un server sono sostanzialmente due: il server vero e proprio ed un client per la gestione di MySQL da command line.

Per evitare problemi di dipendenze, si procede prima con l’installazione del software client:
[root@vagante software]# rpm -ivh MySQL-client-4.0.17-0.i386.rpm
Preparing… ########################################### [100%]
1:MySQL-client         ########################################### [100%]

Installazione del client

Successivamene si prosegue con l’installazione del server:
[root@vagante software]# rpm -ivh
MySQL-server-4.0.17-0.i386.rpm
Preparing…
########################################### [100%]     1:MySQL-server
########################################### [100%]  Preparing db table
Preparing host table
Preparing user table
Preparing func table
Preparing tables_priv table
Preparing columns_priv table
Installing all prepared tables
Vengono inizializzate le tabelle di GRANT (quelle riguardanti i permessi di accesso ai database) e creato l’utente amministratore di MySQL. NOTA: L’installazione tramite RPM a partire dalla versione 4 di MySQL esegue questa operazione automaticamente. Installando la versione 3.23 e’ ancora necessario eseguirla manualmente.

031224 20:26:35  /usr/sbin/mysqld: Shutdown Complete

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
This is done with:
/usr/bin/mysqladmin -u root password ‘new-password’
/usr/bin/mysqladmin -u root -h vagante password ‘new-password’
See the manual for more instructions.
Ci viene ricordato di assegnare una password all’utente di root di MySQL
Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at http://www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com

Durante l’installazione viene creata anche la directory dati di MySQL /var/lib/mysql, la quale deve essere di proprietà dell’account utente utilizzato per far girare il server. E’ buona norma che solo questo utente abbia l’accesso a questa directory e che i relativi permessi siano settati a 700 al fine di evitare possibili problemi di sicurezza.

CONFIGURAZIONE POST INSTALLAZIONE
Una volta avviato il server tramite /etc/rc.d/init.d/mysql start oppure tramite l’utilty service, se presente, con service mysql start è necessario collegarsi ad esso per assegnare una password all’utente root. L’utente root di MySQL ha i diritti per amministrare ogni componente del server, e di default viene creato senza password.

E’ possibile settare la password di root grazie al tool mysqladmin:
[root@vagante software]# mysqladmin -u root password db3mendo

E’ possibile utilizzare anche un secondo metodo per assegnare la password di root del server: [root@vagante software]# mysql -u root
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 4.0.17-standard

Type ‘help;’ or ‘\h’ for help.
Type ‘\c’ to clear the buffer.

mysql> set PASSWORD FOR root = PASSWORD("db3mendo");
Query
OK, 0 rows affected (0.00 sec)

mysql>
In questo secondo modo, si comunica in modo interattivo con MySQL tramite una console appositamente creata

Una volta terminata la configurazione post installazione non resta settare a seconda del sistema la modalita’ di avvio del server.

Installare MySQL su RedHat e/o Fedora usando gli rpm ufficiali

Non è immediato installare gli RPM ufficiali prelevati dal sito di MySQL nelle distribuzioni RedHat e/o Fedora, a causa di possibili conflitti di dipendenze. Vediamo come avere un MySQL aggiornato anche su queste distribuzioni.

Da sempre RedHat (e in seguito Fedora) ha privilegiato, tra i database server, PostgreSQL piuttosto che MySQL, pur fornendoli entrambe. Il risultato di questa politica è che le versioni di MySQL fornite con RedHat e/o Fedora non sono mai aggiornate, anzi di solito sono decisamente obsolete.

Installare MySQL su queste usando i pacchetti RPM ufficiali presenti sul sito http://www.mysql.com è spesso un problema; non per i pacchetti stessi, ma perchè in quelle distribuzioni sono presenti altri pacchetti (tipicamente i linguaggi Perl, PHP, Python) che necessitano delle librerie di collegamento al server MySQL: questa libreria si chiama libmysqlclient.so, ed è compilata specificatamente per RedHat, e non è la stessa fornita dagli RPM di MySQL.

Se si vuole avere una versione MySQL aggiornata e non si vuole fare la compilazione dai binari, e si vogliono anche usare contemporaneamente i linguaggi PHP e/o Perl forniti con RedHat e/o Fedora (questi ultimi sono quasi sempre aggiornati), occorre procedere come segue:

a) Installare, assieme ai linguaggi indicati, anche il mysql fornito con RedHat e/o Fedora (solo il pacchetto mysql, non anche il mysql-server);

b) salvare in una cartella temporanea il contenuto della cartella /usr/lib/mysql (dovrebbe contenere vari files del tipo libmysqlclient.so.x.x.);

c) rimuovere il pacchetto mysql, ignorando i conflitti di dipendenza, con:
rpm -e --nodeps mysql

d) Installare gli RPM ufficiali di MySql, ovvero MySQL-server, MySQL-client, MySQL-shared (anche MySQL-devel nel caso si debbano poi ricompilare librerie d’altro genere che richiedano i sorgenti di MySQL; è il caso ad es. della liberia DBD::MySQL di Perl); vedi a proposito l’articolo su questo stesso topic;

e) Eventualmente, modificare alcuni files di configurazione in modo da puntare alla corretta posizione di MySQL; per fare un esempio, nel file /etc/php.ini è bene specificare (anche se non sempre necessario) la posizione del socket di connessione al server MySQL, con la riga
mysql.default_socket = /var/lib/mysql/mysql.sock
nella corrispondente sezione del file di configurazione.

e) Se in seguito occorre aggiornare i linguaggi PHP, Perl ecc. e nel farlo dagli rpm si evidenzia tra le dipendenze richieste la libreria libmysqlclient.so, eseguire l’aggiornamento con rpm ignorando le dipendenze (sempre col param. --nodeps).

MySQL: Backup e Restore

Come effettuare il backup ed il restore dei database gestiti con MySQL.

BACKUP
I principali tool messi a disposizione all’amministratore di MySQL per effettuare il backup dei propri dati sono due: mysqlhotcopy e mysqldump.

mysqlhotcopy
mysqlhotcopy è uno script, scritto in linguaggio Perl, che, basandosi sul comando cp, effettua la copia “grezza” di un database, semplicemente copiando il contenuto della relativa directory dati, in un altro luogo sullo stesso sistema. La sua caratteristica principale è la velocità.
Esempio:
[root@vagante /]# mysqlhotcopy arnaldoz /backup-db/

In questo esempio il contenuto del database arnaldoz presente in /var/lib/mysql/arnaldoz viene copiato nella directory /backup-db

mysqldump
Mysqldump è un’utility che presenta alcuni vantaggi rispetto a mysqlhotcopy, ed quindi è maggiormente utilizzata. Essa genera un file ASCII contentente istruzioni SQL (CREATE TABLE, CREATE DATABASE ecc.) che permettono di ricreare completamente un database. Questo metodo permette di utilizzare lo script su qualsiasi piattaforma, ottenendo quindi una soluzione portabile. La seconda importante caratteristica è la flessibilità, modificando lo script prodotto, è possibile il ripristino anche di una sola tabella. Infine mysqldump permette di effetture il dump di un database da remoto.
Esempi:
[root@vagante backup-db]# mysqldump arnaldoz > arnaldoz_dump_db.sql -u root -p
Enter password:
db3mendo
In questo caso viene eseguito il dump del database arnaldoz generando le relative instruzioni nel file arnaldo_dump_db.sql. E’ necessario comunicare a mysqldump che si utilizzerà l’utente amministratore -u root con la relativa password -p
[root@vagante backup-db]# mysqldump --database arnaldoz mysql > arnaldoz_mysql_new_db.sql -u root -p
Enter password:
db3mendo
Utilizzando l’opzione –database si esegue il dump dei detabase indicati, in questo caso arnaldoz e mysql
[root@vagante backup-db]# mysqldump --all-database > arnaldoz_new_db.sql -u root -p
Enter password:
db3mendo
Con l’opzione –all-database viene generato lo script per la creazione di tutti i database presenti sul server

E’ importante notare che utilizzando l’opzione --database o --all-database nello script sql generato vengono incluse anche le istruzioni per creare il database (CREATE DATABASE), mentre negli altri casi, si presuppone che il database sia gia’ esistente, di conseguenza viene generato uno script SQL che si occupa solamente di ricreare le tabelle.

Per effettuare la copia di un database nel modo più veloce ed affidabile possibile, è consigliato di utilizzare l’opzione di mysqldump --opt, la quale abilita automaticamente diverse altre opzioni quali --quick, --add-drop-table,--add-locks,--extended-insert, e--locktables:
[root@vagante backup-db]# mysqldump --opt arnaldoz > arnaldoz_dump_db.sql -u root -p
Enter password:
db3mendo
–quick: effettua il dump direttamente sullo standard output;
–add-drop-table: inserisce le istruzioni di eliminare le tabelle esistenti prima di ricrearle;
–add-locks: blocca momentaneamente gli eventuali inserimenti;
–extended-insert: utilizza un metodo per velocizzare l’inserimento dei dati;
–lock-tables: blocca momentanteamente le tabelle in lettura;

RESTORE
Qualora il backup del database sia stato fatto con mysqlhotcopy, il restore avviene, dopo aver fermato il server, copiando il contenuto del file di backup nella directory dati di MySQL:
[root@vagante /]# cp -R /backup-db/arnaldoz /var/lib/mysql

Per il restore di un database di cui si è fatto il backup con mysqldump è possibile utilizzare l’utility di console mysql.

Alcuni esempi:
[root@vagante backup-db]# mysql < arnaldoz_dump_db.sql -u root -p
Enter password:
db3mendo
Come utente root, si passa a mysql in input lo script che permette di ripristinare il contenuto del database
[root@vagante backup-db]# mysql --one-database arnaldoz < all_db_joker.sql -u root -p
In questo caso sebbene lo script serva per ripristinare un elenco di database, tramite l’opzione –one-database viene specificato solo un database

Log delle query di MySQL e recupero dati istantaneo

E’ possibile far sì che MySQL tenga traccia di tutte le query di comando eseguite su ogni database. Accoppiando questa feature con un meccanismo di backup, è possibile ripristinare un database danneggiato per riportarlo al momento presente.

Innanzitutto si prevede di effettuare un backup periodico dei databases; questo può essere eseguito da cron, garantendo così il salvataggio dei dati almeno fino all’ultimo backup.
Quando viene installato di default, MySQL prevede di eseguire un log esclusivamente delle fasi di avvio e fermata, e di eventuali errori del server. In genere, questi log vengono salvati in
/var/lib/mysql/mysqld.log.
Una volta installato MySQL, si modifichi il file
/etc/my.cnf come segue:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-update=/var/log/mysql/queries
log-long-format

[mysql.server]

[safe_mysqld]
err-log=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Sono evidenziate nello script le parti da modificare. Come si vede, si è preferito far scrivere i log di MySQL su una cartella a parte,
/var/log/mysql, un po’ per analogia con altri server “importanti”, come Samba o Apache, ma anche per il numero di logs che MySQL creerà, come vedremo tra poco.
Occorre ora creare la cartella e darle i permessi necessari:
mkdir /var/log/mysql
chown mysql:mysql /var/log/mysql
chmod 775 /var/log/mysql

Poichè abbiamo spostato la directory dei logs, dovremo cambiare anche il file che MySQL crea per la rotazione dei suoi log standard; la sua posizione dipende dalla distribuzione. Se MySQL è stato installato da pacchetti RPM, si troverà in
/etc/logrotate.d/mysql. Basterà cambiare la riga che indica la posizione del file di log, da

/var/lib/mysql/mysqld.log {
….
a
...
/var/log/mysql/mysqld.log {
....

(N.B. magari, se avete impostato una password per l’utente root di MySQL, modificate anche la riga più oltre che esegue lo scarico dei logs, inserendovi anche la password:
if test -n “`ps acx|grep mysqld`”; then
/usr/bin/mysqladmin
--password=pwd_di_root flush-logs
fi

)
Ora provate a lanciare il server MySQL (o a fermalo e riavviarlo, se già attivo) ed eseguire alcune query di comando (INSERT, DELETE, UPDATE…) sui databases. Nella cartella
/var/log/mysql si creerà un file queries.001 con un contenuto di questo genere:
# /usr/sbin/mysqld, Version: 4.0.15-standard-log at 040301 14:17:16
# Time: 040301 18:38:28
# User@Host: pippo[pippo] @ localhost []
USE dbProva;
UPDATE Download SET IDuser=149, Descrizione=”Inserimento automatico dati “, Updated=”04-2-20″ WHERE IDDown=7;
# Time: 040301 18:50:59
# User@Host: root[root] @ localhost []
ALTER TABLE Download ADD vrs CHAR(10);
# Time: 040301 19:02:13
# User@Host: pippo[pippo] @ localhost []
UPDATE Download SET IDuser=149, Descrizione=”Aggiornamento database”, Updated=”04-2-28″, vrs=”1.0.5″ WHERE IDDown=8;
# Time: 040301 19:02:43
# User@Host: rt[rt] @ localhost []
DELETE FROM Download WHERE IDDown=7;
…..

Ecco quindi il meccanismo di recupero fino al tempo presente: da un backup recuperate la situazione dei databases fino ad un certo momento; quindi fate eseguire a MySQL queste query per aggiungere i comandi che riportano il database fino all’ultima modifica eseguita. Per questo è  sufficiente
mysql -p < /var/log/queries.00n
dove n è il numero del log di query da eseguire.
E’ opportuno sincronizzare da cron i backups e l’aggiornamento dei log: questo può essere fatto con uno script che:
1. Arresti il server MySQL (per impedire modifiche dagli utenti durante il backup);
2. Esegua il backup dei dati;
3. Rilanci il server MySQL.
In tal modo l’ultimo backup, seguito dall’esecuzione dell’ultimo log delle query, ripristinerà integralmente i databases.
C’è un’ultima cosa: ad ogni riavvio, MySQL crea un file di log
queries.00n con n numero progressivo. Se non si vuole mantenere traccia di tutti questi logs (e si vuole evitare l’affollamento del disco), è bene creare una rotazione di questi. Farlo con logrotate è un po’ un problema, perchè la numerazione progressiva di logrotate rischia di creare conflitto con quella di MySQL. Si può allora fare uno script in bash di questo tipo:
file /usr/bin/mysqlrotate:
#!/bin/bash
MYPATH="/var/log/mysql/queries"
MAX=9
if [ -e $MYPATH.00$MAX ]
then
rm $MYPATH.001
N=2
while [ $N -le $MAX ]
do
M=`expr $N - 1`
mv $MYPATH.00$N $MYPATH.00$M
N=`expr $N + 1`
done
fi

Questo script mantiene fino a 9 logs successivi; basta modificare la variabile
MAX per averne di più. Poichè MySQL crea un nuovo log ad ogni riavvio, può essere opportuno inserirlo direttamente nello script di avvio di MySQL stesso, in genere /etc/init.d/mysql; basterà cercare il punto del case di start, ed aggiungere prima di ogni altra cosa la chiamata allo script di rotazione dei log:
….
case “$mode” in
‘start’)
# Start daemon

/usr/bin/mysqlrotate
if test -x $bindir/mysqld_safe
then

MySQL Root Password Recovery

Seguono le istruzioni per resettare una password di root di mysql:
# stoppare mysqld
#killall mysqld

# lanciare mysqld con l’opzione skip-grant-tables, che evita di caricare le tabelle di sistema (tra cui anche quella degli accessi) fornendo libero accesso al servizio mysqld
# /usr/libexec/mysqld -Sg --user=root &

/usr/libexec/mysqld: ready for connections

# entrare in modalità client
# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.56

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

#collegarsi al db mysql e inserire la query di update di cambio password
mysql>
USE mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> UPDATE user
-> SET password=password("mianuovapassword")
-> WHERE user="root";

Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

Gestione permessi su MySQL con Grant e Revoke

MySQL dispone di una gestione dei permessi di accesso molto avanzata e facilmente gestibile.
In moltissimi casi chi sviluppa su mySQL non gestisce i permessi in quanto è normalmente compito del sistemista o DBA (Database Administrator), però ritengo sia fondamentale capire come funzionano i permessi su mySQL perchè questa conoscenza aiuta a individuare molto rapidamente eventuali problematiche che dovessero insorgere.

Come è facile intuire dai nomi stessi GRANT concede privilegi, REVOKE li elimina.

CONCESSIONE PERMESSI CON GRANT

Esempio di sintassi per GRANT:

GRANT  ON database.tabella/e TO user@host;

Analizzando nel dettaglio la sintassi di GRANT possiamo dire che con intendiamo i permessi di SELECT, INSERT, UPDATE ecc… successivamente vi verrà proposta una semplice tabellina dove vengono sintetizzati tutti i tipi di permessi assegnabili agli utenti.
Dopo “ON” bisogna dire per quale database ed eventualmente quale/i tabella/e vale il GRANT che si vuole eseguire sul DB.
Se si volesse assegnare dei permessi su tutte le tabelle di un database “rubrica” il comando da eseguire sarà: ON rubrica.*
Da ciò è facile dedurre che per * si intende tutte le tabelle.

A seguito del comando TO devono essere passati al comando GRANT l’utente che si vuole creare e l’host dal quale è possibile accedere al database server.

Se si desidera assegnare ad un utente certi permessi da parte di tutti gli host possibili bisogna utilizzare il carattere jolly: %
Un’altra opzione FONDAMENTALE per rendere sicuro il database server è di assegnare anche una password per l’utente, semplicemente aggiungendo:

IDENTIFIED BY ‘password’;

Come regola di massima la tendenza da parte di un sistemista che amministra una base dati mySQL è quella di restringere al massimo i permessi sul proprio DB e di concedere privilegi solo in caso di reale necessità.
In fase di sviluppo normalmente un programmatore non si interessa di queste problematiche ma ciò è sbagliato perchè si rischia che quando si va in produzione ci siano dei problemi.

REVOCA DI PRIVILEGI TRAMITE REVOKE

Per rimuovere permessi precedentemente assegnati si utilizza il comando REVOKE, il quale ha la stessa identica sintassi di GRANT:

REVOKE  ON database.tabella/e TO user@host;

NOTA PER CHI VUOLE APPROFONDIRE
Questi sono i comandi base e più che sufficienti per amministrare gli accessi ad un DB mySQL tramite GRANT e REVOKE, comunque per la documentazione completa vi rimando al sito ufficiale:
http://dev.mysql.com/doc/mysql/en/GRANT.html

AUTORIZZAZIONI ASSEGNABILI CON L’ISTRUZIONE GRANT (Le principali) (da leggere)

PRIVILEGIO             DESCRIZIONE
ALL PRIVILEGES      Consente all’utente di eseguire TUTTO sulla base dati
FILE                           Importazione/Esportazione dati da un file su disco
RELOAD                    Ricaricamente tabelle di GRANT e svuotamento LOG
ALTER                       Modifica struttura delle tabelle
INDEX                        Aggiunta e rimozione di indici
SELECT                     Esecuzione query di estrazione dati
CREATE                     Consente di creare database, tabelle e indici
INSERT                      Inserimento nuovi record
DELETE                     Cancellazione record nelle tabelle
SHUTDOWN              Spegnimento servizio mySQL
PROCESS                  Consente di eseguire “processlist” e “kill” per la gestione dei
thread del server
USAGE                      Sinonimo di INSERT, UPDATE e DELETE
UPDATE                    Aggiornamento dati nel DB
DROP                        Possibilità di eliminazione fisica di tabelle o database

Quando si amministrano i permessi bisogna stare particolarmente attenti a diversi privilegi che devono essere lasciati esclusivamente all’utente amministratore ROOT o ad altri power user assolutamente fidati. I privilegi in questione sono i seguenti:

PERMESSI PERICOLOSI DA ASSEGNARE AD UTENTI NON FIDATI (da leggere con attenzione)

PRIVILEGIO          PERICOLO
FILE                        Consente all’utente di leggere qualunque file leggibile da
qualunque parte del mondo sul proprio server (compresi altri DB
mySQL) importando i dati in una tabella
PROCESS              Permette di trovare password e dati importanti soprattutto per la
sicurezza
ALTER                    Permette di rinominare tabelle e di bypassare quindi i controlli di
accesso
SHUTDOWN          Consente lo spegnimento! del server

Gestione accessi da tabelle del DB “MySQL”

Ora vedremo come gestire il controllo degli accessi poichè nella gestione del server questo argomento è di fondamentale importanza.

Di seguito trovate la struttura completa delle tabelle USER e DB che sono quelle principalmente utilizzate:

DESCRIBE USER
I permessi che ci interessano sono solo quelli che abbiamo già studiato nel capitolo relativo a GRANT e REVOKE, gli altri che vedete (Es. ssl_type, ssl_cipher ecc…) sono permessi che non vengono praticamente mai associati ad altri utenti se non all’amministratore (root) e quindi di fatto li possiamo ignorare.
Come sempre si può fare riferimento al manuale ufficiale di mySQL che li descrive in modo molto dettagliato.

SICUREZZA
Per la sicurezza del proprio sistema database è fondamentale non dare MAI permessi globali (validi per tutti i database presenti sul server) ad un utente, ma assegnargli i giusti privilegi dalla tabella DB.

APPROFONDIMENTO
Analizzando bene tutte le tabelle del DB mySQL con il comando show tables; e describe table; possiamo notare come in mySQL si possa assegnare permessi precisi e limitativi utilizzando anche le tabelle “tables_priv” e “columns_priv”.
In sostanza è sufficiente negare tutti i permessi ad un utente e dargli permessi solo sulle singole tabelle o addirittura alle colonne. Sinceramente capita molto raramente di doversi avvalere di queste features di sicurezza.

Installazione di MySQL in Windows

Installazione di MySQL e gestione del servizio in ambiente Windows.

E’ possibile effettuare il download di MySQL, sia in formato RPM che in formato sorgente disponibile per diverse piattaforme, presso il sito del produttore http://www.mysql.com oppure tramite uno dei suo mirror.

DOWNLOAD
La versione per Windows di MySQL, come quella per gli ambienti Unix, può essere scaricata dal sito del produttore http://www.mysql.com nella sezione downloads oppure presso un suo mirror. MySQL è fornito attraverso un file zippato, una volta decompresso sarà possibile lanciare il programma di installazione vero e proprio dal nome setup.exe.

INSTALLAZIONE
Una volta lanciato setup.exe il programma di installazione ci informa che, qualora si intenda installare il server in una posizione differente da C:\MYSQL (la posizione di default) o si intenda avviarlo come servizio è necesario che esista il file di configurazione C:\MY.CNF contentente le seguenti informazioni:
[mysqld]
basedir=E:/installation-path/
datadir=E:/data-path/

Sono disponibili quattro tipi di file di configurazione d’esempio, my-small.cnf, my-medium.cnf, my-large.cnf, my-huge.cnf con parametri diversi a seconda del dimensionamento del server.

Il setup permette di scegliere fra tre diversi tipi di installazione tipica, compatta e personalizzata, salvo configurazioni particolari è consigliato sceglere quella tipica.

Una volta completata l’installazione, sotta la directory /BIN è possibile trovare quattro tipi di eseguibili per avviare il server:
mysqld: con controllo dell’allocazione della memoria, supporto per link simbolici e tabelle delle transazioni;
mysqld-opt: ottimizzato senza supporto per le tabelle delle transazioni;
mysqld-nt: ottimizzato con il supporto per le pipe con nome di NT;
mysqld-max: ottimizzato con il supporto per le tabelle delle transazioni;
mysqld-max-nt: ottimizzato con il supporto per le pipe con nome di NT e le tabelle delle transazioni;

GESTIONE DEL SERVIZIO
Per installare il servizio è necessario utilizzare il parametro -install :
C:\> c:\mysql\bin\mysqld-nt -install
Service successfully installed.

A questo punto è possibile avviare e fermare il il server attraverso la console MMC servizi presente in Strumenti di amministrazione, oppure tramite il comando net:
C:\> net start mysql
Servizio MySQL in fase di avvio.
Avvio del servizio MySQL riuscito.

Avvia MySQL server
C:\> net stop mysql
Il servizio MySQL sta per essere arrestato.
Servizio MySQL arrestato.

Ferma MySQL server

Una volta  impostata la password di amministrazione di MySQL:
C:\mysql\bin> mysqladmin -u root password 1pizz8
il server è pronto per l’uso.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger hanno fatto clic su Mi Piace per questo: