Skip to main content

Password MySQL scaduta: come risolvere in modo permanente

Se vi siete imbattuti in questo articolo è molto probabile che abbiate scoperto a vostre spese la nuova funzionalità introdotta con MySQL 5.7.4 e destinata probabilmente ad essere presente in tutte le versioni successive: la scadenza automatica delle password di tutti gli account, ivi compresi quelli di amministrazione e di sistema come il classico “root”. Se siete soliti connettervi manualmente al Database è probabile che abbiate ricevuto il seguente messaggio direttamente dalla GUI del vostro client MySQL preferito (SQLyog, MySQL Workbench o qualsiasi altro):

Your password has expired. To log in you must change it using a client that supports expired passwords.

Tuttavia, i primi ad accorgersi – si fa per dire – di questo problema sono spesso i siti e servizi web come Wordrpress, Joomla, phpBB e/o qualsiasi altro che necessiti di una connesione al nostro database MySQL per funzionare. Questo significa inevitabilmente accusare un downtime che, se non si interviene prontamente, può costare caro alla nostra media di uptime mensile e farci perdere più di qualche accesso.

Come sempre, la prima cosa da fare per risolvere il problema è documentarsi: la nuova funzionalità, introdotta per ovvi motivi di sicurezza, è ampiamente illustrata nella documentazione ufficiale di MySQL 5.7, che è opportuno leggere con attenzione prima di effettuare qualsiasi cambiamento.

Immediatamente dopo, possiamo passare all’azione. La scelta, che dobbiamo effettuare responsabilmente sulla base di quanto appreso dalla documentazione ufficiale, è se limitarsi a cambiare password ai nostri account MySQL – abituandoci a farlo spesso e di frequente – oppure disattivare la scadenza automatica. Inutile dire che non c’è una scelta migliore o peggiore, tutto dipende dal nostro scenario di impiego. E’ probabile che, come spesso accade in questi casi, la verità si trovi nel mezzo: nel caso in cui l’account MySQL è relativo a un operatore o amministratore, è senz’altro preferibile lasciare che la password scada periodicamente, così da essere “costretti” a cambiarla di frequente: un’ottima abitudine per ridurre al minimo i rischi legati a possibili perdite o furti di password (da parte nostra o dei nostri collaboratori) e, di conseguenza, possibili accessi non autorizzati. Al tempo stesso, se l’account è di sistema – ad esempio quello utilizzato da un sito o servizio web – è probabile che la scelta più logica sia quella di disattivare la scadenza automatica, magari limitando con l’occasione i permessi di tale account.

Cosa fare nel caso degli account utilizzato sia da servizi di sistema che da operatori? La risposta è molto semplice: è la buona occasione per liberarci definitivamente da questo tipo di account, che non dovrebbero esistere in un sistema organizzato secondo il buon senso: nessun account di sistema dovrebbe essere utilizzato anche per effettuare un accesso mauale e viceversa, secondo il ben noto principio della Separation of Duties. Potremmo dire che uno dei meriti principali di questa nuova funzionalità di MySQL è proprio quello di costringere tutti gli amministratori di sistema a rivedere la logica alla base degli account creati, facendo chiarezza una volta per tutte sul ruolo attribuito a ciascuno di essi e limitandone lo scope di conseguenza.

Tutto ciò premesso, vediamo come possiamo intervenire per risolvere il nostro problema. Nel caso in cui fossimo ancora in grado di accedere con un account con privigilegi di amministratore – come ad esempio l’account root – la soluzione sarebbe fin troppo ovvia: basterebbe effettuare il login con l’account in questione e cambiare la password scaduta. Esistono però almeno due situazioni che richiedono l’esecuzione di azioni diverse e/o aggiuntive:

 

  • Se anche la nostra password di amministrazione / root è scaduta.
  • Se vogliamo disabilitare la scadenza della password per uno o più account.

Lo scopo di questo articolo è quello di fornire tutte le informazioni necessarie per il conseguimento di questi risultati.

(altro…)

 

MySQL Lock Wait Timeout Exceeded Error in InnoDB Tables – Come risolvere

Alcuni giorni fa ho avuto uno strano problema durante l’installazione dell’ultima (al momento di scrivere) stable build di MediaWiki – ovvero la 1.27.1 – per conto di un cliente: l’operazione prevedeva anche tutti i principali plugin e add-in ed è avvenuta seguendo grossomodo gli stessi passaggi che ho già avuto modo di descrivere qui (installazione con IIS), qui (installare il WikiEditor) e infine qui (importazione dei template di Wikipedia). Inutile dire che tutte le operazioni sono state effettuate utilizzando l’account di amministrazione predefinito, ovvero quello che viene creato durante la procedura di installazione. Come sempre ho creato il database utilizzando le tabelle InnoDB, consigliate da MediaWiki per affidabilità e prestazioni in quanto supportano il lock sia a livello di table che di singole righe.

Una volta impostato il tutto, come già fatto innumerevoli altri volte, mi sono spostato sulla Pagina Speciale che consente di creare altri utenti… E lì, non appena ho provato a creare il primo utilizzando l’apposito form, sono stato accolto da uno strano (e apparentemente inspiegabile) errore HTTP 500.

(altro…)

 

MySQL 5.6 – Come eseguire script da command-line senza password in chiaro con mysql_config_editor e Host Alias

Non c’è amministratore di sistema abituato a lavorare con MySQL che non abbia mai fatto uso di qualche console script per gestire backup, operazioni di manutenzione, allineamenti o altre procedure periodiche: nella maggior parte dei casi questi script vengono realizzati in PHP/bash (su OS Linux) oppure PHP/batch/Powershell (su OS Windows), quindi pianificati per una esecuzione periodica tramite cron job, operazioni pianificate, software di backup e via dicendo.

Si tratta di un approccio particolarmente efficace, specialmente per chi non ha intenzione di spendere soldi acquistando la licenza di altri software di gestione/automazione. Non è però un metodo esente da problemi, soprattutto in ottica di sicurezza: è infatti necessario inserire le credenziali dell’utente MySQL all’interno dello script e in modalità non criptata, mettendone quindi a rischio la password.

Consideriamo l’esempio seguente:

(altro…)

 

SQLyog – Interfaccia di amministrazione per MySQL gratuita per Windows

Se lavorate parecchio con MySQL è probabile che conosciate molto bene la suite MySQL Workbench, lo strumento di gestione unificato che contiene tutti gli strumenti necessari a un DBA per svolgere il proprio lavoro, tra cui:

  • Design di tabelle e DB Schema, tramite interfaccia visuale.
  • Database Connection Panel e SQL Editor, per gestire connessioni a DB locali e remoti ed eseguire query tramite GUI.
  • Strumenti di Backup e Migration, per importare ed esportare DB e tabelle da e verso altri server o altri DB Engine.
  • Performance Dashboard, per osservare in tempo reale le performance del DB.

Si tratta senza dubbio di una ottima soluzione, in grado di soddisfare le esigenze della maggior parte degli sviluppatori e amministratori di sistema.

Esiste però un’alternativa, molto meno conosciuta e senz’altro meno potente, che personalmente mi sento di consigliare a corredo del Workbench in quanto consente di gestire in modo molto più immediato e user-friendly la maggior parte delle funzioni dello strumento ufficiale, garantendo nel contempo un livello di affidabilità altrettanto elevato. Il nome di questa applicazione è SQLyog,  sviluppato da Webyog e disponibile in una doppia versione: Enterprise, disponibile in modalità Trialware e dedicata prevalentemente all’utilizzo aziendale e lavorativo, e Community, orientata ovviamente al mondo degli sviluppatori e gratuita per uso personale.

(altro…)

 

MySQL – Convertire tutte le tabelle da MyISAM a InnoDB e viceversa

Vi siete mai trovati a dover convertire una, alcune o tutte le tabelle di un vostro Database MySQL da MyISAM a InnoDB e/o viceversa?

Ecco un paio di query che potete utilizzare per compiere l’operazione in modo semplice ed efficiente. Come avrete modo di vedere le query non eseguono i comandi direttamente, ma sono pensate per creare un elenco di query che andranno poi eseguite per ottenere l’effetto sperato. Per eseguirle, copiatele e incollatele all’interno di qualsiasi MySQL GUI o command-line tool, tenendo presente che ogni riga equivale a una singola query.

Per convertire tutte le tabelle di DBNAME da InnoDB a MyISAM

Per convertire tutte le tabelle di DBNAME da MyISAM a InnoDB

Per convertire tutte le tabelle da InnoDB a MyISAM (tutti i database)

 

Per convertire tutte le tabelle da MyISAM a InnoDB (tutti i database)

 

Lo ripetiamo ancora una volta, giusto per essere sicuri: questi comandi non eseguiranno alcuna modifica al vostro DB, si limiteranno a compilare una serie di query che andranno eseguite successivamente – e che andranno, queste si, a modificare il DB.

Per il momento è tutto: felice conversione!