Guida alla gestione delle password MySQL: come impostare, modificare, reimpostare e proteggere le password (Windows, Linux, Mac)

目次

1. Introduzione

L’importanza della gestione delle password MySQL

MySQL è un sistema di gestione di database ampiamente utilizzato in tutto il mondo. Tuttavia, la fondazione della sua gestione della sicurezza risiede nella corretta configurazione e amministrazione delle password. Senza una gestione adeguata delle password, potresti affrontare i seguenti rischi:

  • Accesso non autorizzato : Le password deboli rendono il tuo sistema vulnerabile ad attacchi esterni.
  • Violazione dei dati : Informazioni sensibili possono essere esposte da utenti malintenzionati.
  • Manomissione del sistema : La cancellazione o modifica dei dati può influire sul normale funzionamento di siti web e applicazioni.

Per evitare questi rischi, è essenziale impostare password robuste e cambiarle regolarmente. In questo articolo, spiegheremo in dettaglio i seguenti aspetti della gestione delle password MySQL:

Come impostare le password per i nuovi utenti
Come cambiare le password per gli utenti esistenti
Come reimpostare una password dimenticata
Come verificare la robustezza della password
Errori comuni e come risolverli
Impostazioni consigliate per migliorare la sicurezza

Leggendo questo articolo, acquisirai le conoscenze e le competenze necessarie per gestire correttamente le password MySQL, quindi assicurati di leggerlo fino alla fine.

2. Come impostare e modificare le password MySQL

Creare un nuovo utente e impostare una password

Questa sezione spiega come creare un nuovo utente e impostare una password in MySQL.

1. Accedi a MySQL

Per prima cosa, accedi come amministratore MySQL (ad esempio l’utente root).

mysql -u root -p

-u root è un’opzione per accedere come utente root, e -p mostra un prompt per la password.

2. Crea un nuovo utente e imposta una password

Utilizza il comando CREATE USER per creare un nuovo utente e impostare una password.

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'secure_password';
  • 'newuser'@'localhost' : Specifica il nome utente ( newuser ) e l’host ( localhost ) da cui l’utente può connettersi.
  • 'secure_password' : La password da impostare (assicurati di usare una password robusta).

3. Concedi i privilegi appropriati

Devi concedere i privilegi di database al nuovo utente. Ad esempio, per concedere tutti i privilegi:

GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITH GRANT OPTION;
  • ALL PRIVILEGES : Concede tutti i privilegi.
  • *.* : Consente l’accesso a tutti i database e tabelle.
  • WITH GRANT OPTION : Consente all’utente di concedere privilegi ad altri utenti.

4. Applica i privilegi

Esegui FLUSH PRIVILEGES per applicare le modifiche.

FLUSH PRIVILEGES;

Hai ora creato con successo un nuovo utente con una password sicura e i privilegi appropriati.

Modificare la password di un utente esistente

Questa sezione spiega come cambiare la password di un utente MySQL esistente.

1. Accedi a MySQL

Accedi con privilegi amministrativi.

mysql -u root -p

2. Cambia la password usando ALTER USER (MySQL 5.7 e versioni successive)

ALTER USER 'existinguser'@'localhost' IDENTIFIED BY 'new_secure_password';
  • 'existinguser'@'localhost' : Il nome utente e l’host da modificare.
  • 'new_secure_password' : La nuova password.

3. Cambia la password usando SET PASSWORD (MySQL 5.6 e versioni precedenti)

SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('new_secure_password');

Utilizzare la funzione PASSWORD() garantisce che la password sia correttamente crittografata prima di essere memorizzata.

4. Applica le modifiche

Non dimenticare di eseguire FLUSH PRIVILEGES;.

FLUSH PRIVILEGES;

Ora puoi cambiare in modo sicuro la password di un utente esistente usando questo metodo.

3. Come reimpostare una password MySQL se l’hai dimenticata

Anche se dimentichi la tua password MySQL, puoi reimpostarla seguendo la procedura corretta. Questa sezione spiega come reimpostare le password su Windows, Linux e Mac.

Come reimpostare una password MySQL su Windows

Su Windows, un approccio comune per reimpostare la password di root di MySQL è utilizzare l’opzione skip-grant-tables.

1. Arresta il servizio MySQL

Prima, arresta il servizio MySQL in esecuzione su Windows.

net stop mysql

In alternativa, puoi aprire services.msc e arrestare manualmente il servizio MySQL.

2. Avvia MySQL usando mysqld --skip-grant-tables

mysqld --skip-grant-tables --skip-networking

3. Accedi a MySQL

mysql -u root

4. Imposta una nuova password

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

Oppure, per MySQL 5.6 e versioni precedenti, usa SET PASSWORD.

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');

5. Riavvia MySQL

net stop mysql
net start mysql

Come reimpostare una password MySQL su Linux / Mac

1. Arresta il servizio MySQL

sudo systemctl stop mysql

2. Avvia MySQL in modalità --skip-grant-tables

sudo mysqld_safe --skip-grant-tables --skip-networking &

3. Accedi a MySQL

mysql -u root

4. Reimposta la password

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

5. Riavvia MySQL

sudo systemctl start mysql

Cambiamenti nei metodi di reimpostazione della password in MySQL 8.0 e versioni successive

In MySQL 8.0, il meccanismo di gestione delle password è cambiato, quindi dovresti tenere presente il seguente punto.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';

Ciò ti consente di continuare a utilizzare il metodo di autenticazione legacy delle password quando necessario.

4. Risoluzione dei problemi comuni durante la modifica delle password MySQL

Potresti incontrare errori quando tenti di modificare le password MySQL. Questa sezione spiega le cause e le soluzioni per gli errori più comuni.

ERRORE 1045 (28000): Accesso negato per l’utente

Causa dell’errore

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Questo errore si verifica durante l’accesso a MySQL se la password è errata o i privilegi sono insufficienti.

Soluzione

  1. Ricontrolla la password inserita
  2. Specifica il nome utente e l’host corretti
    SELECT User, Host FROM mysql.user;
    
  1. Reimposta la password (vedi la sezione di reimpostazione della password)
  2. Configura correttamente i privilegi
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

ERRORE 1133: Impossibile trovare alcuna riga corrispondente nella tabella user

Causa dell’errore

ERROR 1133: Can't find any matching row in the user table

Questo errore si verifica quando l’utente specificato non esiste.

Soluzione

  1. Controlla l’elenco degli utenti attuali
    SELECT User, Host FROM mysql.user;
    
  1. Ricrea l’utente
    CREATE USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
    
  1. Specifica l’host corretto (usa localhost o % in modo appropriato)

ERRORE 1820: Devi reimpostare la tua password

Causa dell’errore

ERROR 1820: You must reset your password using ALTER USER statement before executing this statement.

Questo errore si verifica quando la password è scaduta.

Soluzione

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

Per disabilitare la scadenza della password:

SET GLOBAL default_password_lifetime = 0;

ERRORE 2059: Impossibile caricare il plugin caching_sha2_password

Causa dell’errore

ERROR 2059: Plugin caching_sha2_password could not be loaded

In MySQL 8.0 e versioni successive, il plugin di autenticazione predefinito è cambiato in caching_sha2_password, il che può causare errori con alcuni client.

Soluzione

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';

Oppure aggiungi quanto segue al file di configurazione MySQL (my.cnf o my.ini) e riavvia MySQL.

[mysqld]
default_authentication_plugin=mysql_native_password

Riavvia MySQL:

sudo systemctl restart mysql

5. Rafforzamento della Sicurezza di MySQL e Impostazioni Raccomandate

Rafforzare la sicurezza di MySQL è essenziale per migliorare la protezione del database e impedire accessi non autorizzati e violazioni dei dati. Questa sezione presenta configurazioni consigliate per migliorare la sicurezza di MySQL.

Impostare Password Forti

Usare password deboli in MySQL rende il tuo sistema un bersaglio facile per gli attaccanti. Configura le impostazioni per aumentare la robustezza delle password.

Abilitare una Politica Password

Verifica la politica password attuale:

SHOW VARIABLES LIKE 'validate_password%';

Configura una politica password forte:

SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

Impostare la Scadenza della Password

Cambiare regolarmente le password migliora la sicurezza.

Verifica l’impostazione attuale della scadenza della password:

SHOW VARIABLES LIKE 'default_password_lifetime';

Imposta la scadenza della password a 90 giorni:

SET GLOBAL default_password_lifetime = 90;

Rafforzare la Sicurezza dell’Utente root

Limitare l’Accesso Remoto per l’Utente root

Verifica la configurazione host attuale per l’utente root:

SELECT User, Host FROM mysql.user WHERE User = 'root';

Disabilita l’accesso remoto per root:

UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;

Creare un Account Admin Alternativo e Disabilitare root

CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
RENAME USER 'root'@'localhost' TO 'disabled_root'@'localhost';
FLUSH PRIVILEGES;

Limitare le Connessioni Remote di MySQL

Modifica il file di configurazione (my.cnf o my.ini):

[mysqld]
bind-address = 127.0.0.1

Configura il firewall su Linux:

sudo ufw deny 3306

Consenti solo un indirizzo IP specifico:

sudo ufw allow from 192.168.1.100 to any port 3306

Rimuovere Account e Privilegi Inutili

Verifica l’elenco utenti attuale:

SELECT User, Host FROM mysql.user;

Rimuovi gli utenti anonimi:

DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;

Rimuovi il database di test non necessario:

DROP DATABASE test;
FLUSH PRIVILEGES;

Abilitare il Logging di MySQL

Abilita il registro degli errori:

[mysqld]
log_error = /var/log/mysql/error.log

Abilita il registro delle query generali:

general_log = 1
general_log_file = /var/log/mysql/general.log

Riavvia MySQL:

sudo systemctl restart mysql

6. Domande Frequenti (FAQ)

Questa sezione riassume domande comuni e soluzioni relative alla configurazione, modifica e reimpostazione della password MySQL.

Q1: Qual è il modo più semplice per recuperare una password root MySQL dimenticata?

Soluzione

  1. Arresta MySQL
    sudo systemctl stop mysql
    
  1. Avvia MySQL in modalità skip-grant-tables
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    
  1. Accedi a MySQL
    mysql -u root
    
  1. Imposta una nuova password
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
    
  1. Riavvia MySQL
    sudo systemctl restart mysql
    

Q2: Cosa devo fare se vedo “ERROR 1045 (28000): Access denied for user”?

Soluzione

  1. Verifica la password inserita
    mysql -u root -p
    
  1. Conferma che l’utente esista
    SELECT User, Host FROM mysql.user;
    
  1. Reimposta la password (vedi le istruzioni precedenti)
  2. Concedi i privilegi appropriati
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

Q3: C’è una differenza tra MySQL 5.6 e 8.0 quando si cambiano le password?

Modifica della password in MySQL 5.6 e versioni precedenti

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');

Modifica della password in MySQL 8.0 e versioni successive

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

In MySQL 8.0, poiché caching_sha2_password è il metodo di autenticazione predefinito, i client più vecchi potrebbero richiedere la seguente modifica:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';

Q4: Come posso rafforzare la politica delle password MySQL?

Configura una politica di password forte

SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

Q5: È sicuro disabilitare l’utente root di MySQL?

Soluzione

  1. Crea un account amministratore
    CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'secure_password';
    GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
    
  1. Disabilita l’account root
    RENAME USER 'root'@'localhost' TO 'disabled_root'@'localhost';
    FLUSH PRIVILEGES;
    

Q6: Esistono strumenti per gestire in modo sicuro le password MySQL?

Soluzione

  1. mysql_config_editor (Strumento ufficiale MySQL)
    mysql_config_editor set --login-path=local --host=localhost --user=root --password
    

Questo ti consente di accedere senza digitare esplicitamente la password.

mysql --login-path=local
  1. Gestori di password (Bitwarden, 1Password, KeePass, ecc.)
  • Utile per generare e archiviare in modo sicuro password complesse.

Q7: Posso registrare le modifiche alle password MySQL?

Soluzione

Abilita il General Query Log

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log

Riavvia MySQL:

sudo systemctl restart mysql

7. Conclusione

Questo articolo ha spiegato tutto, dalle basi alle tecniche avanzate, della gestione delle password MySQL. Di seguito è riportato un riepilogo dei punti chiave insieme a una lista di controllo per gestire correttamente le password MySQL.

Punti chiave della gestione delle password MySQL

Una corretta configurazione e gestione delle password è la base della sicurezza
Imposta password complesse quando crei nuovi utenti
Cambia le password regolarmente e configura le politiche di scadenza
Comprendi le procedure di recupero per password dimenticate
Risolvi correttamente gli errori durante le modifiche delle password
Ottimizza l’accesso remoto e la gestione dell’utente root per rafforzare la sicurezza
Abilita la registrazione per monitorare le attività legate alle password

Lista di controllo per la gestione delle password MySQL

Checklist ItemStatus
Have you set a strong root password for MySQL?✅ / ❌
Do you use the CREATE USER command when creating new users?✅ / ❌
Have you enabled the validate_password plugin and configured a strong password policy?✅ / ❌
Do you regularly change passwords and set expiration policies?✅ / ❌
Have you disabled remote access for the root user?✅ / ❌
Have you removed unnecessary or anonymous accounts?✅ / ❌
Do you understand how to reset passwords using skip-grant-tables mode?✅ / ❌
Do you understand how to resolve ERROR 1045 and ERROR 1820 during password changes?✅ / ❌
Have you enabled MySQL logs (general_log and error_log)?✅ / ❌

Azioni consigliate successive alla lettura di questo articolo

  1. Rivedi la tua attuale politica delle password e rafforzala se necessario
    SHOW VARIABLES LIKE 'validate_password%';
    SET GLOBAL validate_password.policy = STRONG;
    SET GLOBAL validate_password.length = 12;
    
  1. Rimuovi gli account non necessari
    DELETE FROM mysql.user WHERE User='';
    DROP DATABASE test;
    FLUSH PRIVILEGES;
    
  1. Limita l’accesso remoto per l’utente root
    UPDATE mysql.user SET Host='localhost' WHERE User='root';
    FLUSH PRIVILEGES;
    
  1. Configura la scadenza regolare delle password
    SET GLOBAL default_password_lifetime = 90;
    
  1. Abilita la registrazione per il monitoraggio
    [mysqld]
    log_error = /var/log/mysql/error.log
    general_log = 1
    general_log_file = /var/log/mysql/general.log
    

Riavvia MySQL:

sudo systemctl restart mysql

Articoli correlati per approfondire

📌 Guida dettagliata alla gestione dei privilegi utente MySQL
📌 Procedure di backup e ripristino MySQL
📌 Come ottimizzare i database MySQL
📌 Configurare MySQL con autenticazione esterna (LDAP o OAuth)

Considerazioni finali

La gestione delle password MySQL è conoscenza essenziale per proteggere la sicurezza del database.
Applica le pratiche illustrate in questa guida e assicurati una gestione sicura del database! 💪