Di seguito vengono indicate tutte le misure e gli accorgimenti che possono essere di ausilio nel rafforzare la sicurezza di un sistema di database basato su MySQL:
- restringere l'accesso fisico al sistema che ospita il server MySQL al fine di eliminare la possibilità di far partire il server mediante l'uso di un floppy disk guadagnando in tal modo l'accesso indiscriminato al file system;
- installare sul sistema un antivirus e mantenerne costantemente aggiornati i file delle definizioni;
- utilizzare sempre il file system NTFS poichè quest'ultimo possiede caratteristiche di sicurezza e di controllo degli accessi molto avanzate;
- configurare il servizio MySQL in modo tale che non sia eseguito nel contesto del Local System Account ma di un utente avente privilegi di lettura e scrittura sulle sole directory in cui sono situati i file del database;
- nascondere il servizio MySQL dalle eventuali richieste di enumerazione utilizzando l'opzione /HIDDEN:YES del comando NET CONFIG SERVER del sistema operativo;
- proteggere adeguatamente la porta TCP 3306, sulla quale il server MySQL rimane in ascolto per default, da eventuali attacchi esterni ed anche da semplici tentativi di scansione; <!--[if !supportLists]-->
- assicurarsi che tutte le condivisioni di sistema siano read-only oppure consentirne l'accesso in scrittura in modo molto restrittivo;
- assicurarsi che per tutti gli utenti ed in particolare per l'utente root sia stata definita un password di adeguata complessità ( <!--[endif]--> in particolare dovrebbero essere evitate assolutamente password del tipo plan-text oppure basate su dizionario);
- mantenersi sempre aggiornati con le informazioni riguardanti le patch di sicurezza rilasciate dal produttore del software;
- rimuovere l'anonimous user dalla tabella user;<O:P></O:P>
- se le connessioni tra client e server avvengono nell'ambito di una rete "non sicura" ed i dati coinvolti hanno carattere di elevata confidenzialità adottare meccanismi di tunneling SSH che garantiscano una adeguata cifratura dei dati (a tale proposito va ricordato che a partire dalla versione 4.0 MySQL fornisce un supporto nativo per OpenSSL);
- se possibile evitare di indicare i nomi degli host nelle tabelle dei privilegi ed utilizzare al loro posto gli indirizzi IP (questo può evitare attacchi di DNS spoofing tendenti a bypassare meccanismi rudimentali di protezione quali appunto quelli basati sul nome degli host); in ogni caso non utilizzare mai nelle tabelle dei privilegi i caratteri jolly;
- <!--[endif]--> <!--[if !supportLists]--> <!--[endif]--> <!--[endif]--> <!--[endif]--> dare agli utenti ordinari solo i privilegi strettamente necessari all'esercizio delle loro funzioni e non concedere nessun privilegio sulle tabelle di sistema user e mysql;
- prestare particolare attenzione al privilegio file che consente di leggere e scrivere direttamente all'interno di cartelle sul server attraverso le istruzioni LOAD DATA INFILE e SELECT...INTO OUTFILE;
- eseguire periodicamente le opportune procedure di backup dei dati assicurando le copie su supporti fisicamente sicuri;
Inoltre è opportuno ricordare alcune utili opzioni che possono essere impiegate nell'esecuzione del servizio MySQL e che ne
influenzano le caratteristiche:
--safe-show-database: con questa opzione il comando SHOW DATABASES
mostra soltanto i database in relazione ai quali l'utente possiede almeno un
privilegio;
--safe-user-create: questa opzione impedisce la
possibilità di creare un nuovo utente tramite l'istruzione grant
nell'ipotesi in cui non sussista il privilegio di INSERT per la tabella
user;
--skip-name-resolve: con questa opzione viene forzato
l'inserimento di indirizzi IP oppure del localhost in tutte le colonne
host delle tabelle dei grant;
--skip-networking: impedisce
l'instaurazione di connessioni TCP/IP;
--skip-show-database: impedisce
l'esecuzione del comando SHOW DATABASES;