Password MySQL scaduta: come risolvere in modo permanente

MySQL Master-Master Replication setup in 5 easy steps

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.

Come reimpostare una password scaduta

Tra i numerosi workaround possibili questo è probabilmente il più veloce, nonché uno dei pochi che funziona sia in ambiente Windows che Linux:

  • Interrompere il servizio/processo MySQL
  • Localizzare e aprire il file di configurazione relativo all'istanza di MySQL su cui si desidera intervenire (solitamente è   C:\ProgramData\MySQL\MySQL Server 5.7\my.ini  per sistemi Windows, /etc/mysql/my.cnf  o  /etc/mysql/my.cnf  per Linux)
  • Aggiungere le righe seguenti subito sotto la sezione denominata  [mysqld] :
  • Avviare nuovamente il servizio/processo MySQL.
  • Effettuare il login al server utilizzando la propria GUI MySQL preferita, utilizzando l'account root - o qualsiasi altro account con privilegi di amministrazione sulle tabelle di sistema MySQL: le linee inserite poco sopra ci consentiranno di effettuare il login utilizzando qualsiasi password, o anche senza specificare alcuna password.
  • Eseguire la query seguente: UPDATE mysql.user SET authentication_string = PASSWORD('YourPassword'), password_expired = 'N' WHERE User = 'YourUser' AND Host = 'YourHost'; FLUSH PRIVILEGES;  Non dimenticate di sostituire i placeholder YourPasswordYourUser e YourHost a seconda della password, utente e host (normalmente  *  o  localhost) che avete intenzione di modificare. E' anche possibile cambiare la password dell'account root@localhost, nel qual caso occorrerà specificare   User = 'root' AND Host = 'localhost' .
  • Aprire nuovamente il file di configurazione MySQL ed eliminate - o commentate - il comando   skip-grant-tables  aggiungo poco fa.
  • Arrestate e riavviate nuovamente il servizio/processo MySQL.

Questo è quanto. Nel caso in cui non vogliate (o non abbiate modo di) modificare il file di configurazione, potete in alternativa interrompere il servizio/processo mysqld e lanciarlo nuovamente aggiungendo l'opzione   --skip-grant-tables  tramite riga di comando. Inoltre, nel caso in cui non abbiate un client MySQL a disposizione, potete eseguire gli ultimi passaggi direttamente da command prompt utilizzando il comando console mysql presente nella cartella   /bin/  dell'installazione MySQL: è sufficiente digitare   mysql -u root  per accedere al prompt MySQL, mediante il quale sarà possibile eseguire le query. Anche in questo caso non sarà necessario inserire alcuna password, a patto che il servizio/processo sia stato avviato con l'opzione   --skip-grant-tables.

Come disabilitare la scadenza automatica della Password

La query seguente consente di disabilitare la nuova policy di scadenza automatica delle password per un singolo utente:

Nel caso in cui si voglia disabilitare la policy a livello globale, è sufficiente aggiungere (o modificare, se già presente) la seguente istruzione al file di configurazione di MySQL:

IMPORTANTE: il cambio della policy non è retroattivo: sarà comunque necessario impostare manualmente il SET PASSWORD EXPIRE NEVER  - secondo le modalità descritte poco sopra - per tutti gli utenti creati prima del cambio della policy.

Per il momento è tutto: felice MySQL!

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.