Introduzione
Questo articolo è per gli utenti che stanno cercando di accedere a MySQL con una password corretta ma stanno ricevendo un errore: “Error 1045: Access denied for user (using password: YES)”
Se hai dimenticato la tua password di root di MySQL, vedi questo articolo:
- Come resettare la password di root di MySQL.
Se stai cercando di accedere come root tramite phpMyAdmin, vedi:
- Can’t log in phpMyAdmin: mysqli_real_connect(): (HY000/1698): Access denied for user ‘root’@’localhost’
Understanding MySQL Users and Hosts
MySQL limita l’accesso degli utenti in base al valore host
di un utente. Per impostazione predefinita, il valore host
per l’account di root e i nuovi utenti è impostato a localhost
, il che significa che si può accedere solo tramite la macchina locale o tramite phpMyAdmin se installato sullo stesso localhost. Se provi ad accedere ad un account localhost
da remoto, potrebbe rifiutare la tua password corretta con “Accesso negato per l’utente (usando la password: SI)”.
Se guardiamo questa semplice lista di utenti MySQL qui sotto come esempio:
+------------------+-------------+| User | Host |+------------------+-------------+| test-user1 | localhost || test-user3 | 10.0.53.185 || test-user2 | % |
Sopra abbiamo tre utenti MySQL con diversi valori host
.
Diamo un’occhiata ad alcuni scenari in cui la password corretta può essere rifiutata a seconda del valore host
:
- Utente
- ✅ Può accedere dal
localhost
, cioè dalla macchina su cui è in esecuzione il servizio MySQL. - ✅ Può accedere da phpMyAdmin se installato sullo stesso localhost.
- ❌Non può accedere da remoto e otterrà “Access denied for user (using password: YES)”.
- ✅ Può accedere dal
- User
- ✅ Può accedere solo dall’indirizzo IP
10.0.53.185
. - ❌ Non può accedere da qualsiasi altro indirizzo IP “Access denied for user (using password: YES)”.
- ❌ Impossibile accedere da localhost “Access denied for user (using password: YES)”.
- ❌ Impossibile accedere da phpMyAdmin “Access denied for user (using password: YES)”.
- ✅ Può accedere solo dall’indirizzo IP
- User
%
- ✅ Può accedere da qualsiasi luogo (
%
è un carattere jolly).
- ✅ Può accedere da qualsiasi luogo (
Modificare il valore dell’host di un utente MySQL
Puoi cambiare il valore dell’host per un utente usando l’account di root di MySQL o qualsiasi account con privilegi di superutente. Questo può essere fatto tramite la linea di comando o phpMyAdmin.
Da linea di comando
Dovrai accedere al tuo database MySQL usando root o un superutente che ha accesso alla tabella MySQL Users.
L’account root è per default accessibile solo da localhost, quindi potresti ottenere “Access denied for user (using password: YES)” se provi ad accedere da remoto. In tale eventualità, dovrai in qualche modo ottenere l’accesso locale al server.
Per accedere a un database MySQL locale:
mysql -u root -p
Per accedere a un database MySQL remoto, sostituisci semplicemente hostname_or_ip
con il tuo.
mysql -u root -h hostname_or_ip -p
Una volta entrato in MySQL, elenca tutti gli utenti MySQL e i loro host corrispondenti nel tuo database.
SELECT User,Host FROM mysql.user;
Risultato:
+------------------+-------------+| User | Host |+------------------+-------------+| test-user1 | localhost || test-user3 | 10.0.53.185 || test-user2 | % |+------------------+-------------+3 rows in set (0.00 sec)
Sopra possiamo vedere una lista di utenti MySQL e i loro host.
Se vogliamo accedere usando test-user1
in remoto da qualsiasi luogo, dobbiamo cambiare il valore dell’host con il carattere jolly %
, che permetterà il login remoto da qualsiasi luogo. Per una maggiore sicurezza, potreste cambiarlo con un indirizzo IP.
Nell’esempio qui sotto, stiamo cambiando l’host per test-user1
da localhost
a %
%
significa wildcard e permetterà a questo utente di accedere da remoto da qualsiasi luogo.
RENAME USER 'test-user1'@'localhost' TO 'test-user1'@'%';
Devi pulire i privilegi di MySQL perché i cambiamenti abbiano effetto.
FLUSH PRIVILEGES;
Ora prova ad accedere di nuovo da remoto.
Via phpMyAdmin
Entra in phpMyAdmin usando il tuo account root o un account con privilegi da superutente.
- Una volta entrato in phpMyadmin, clicca sul database
mysql
nella colonna di sinistra. - Clicca sulla scheda SQL.
- Digita o incolla nella casella della query SQL:
SELECT User,Host FROM mysql.user;
per elencare tutti gli utenti MySQL nel database. - Clicca su Go per eseguire la query.
Ora dovresti vedere una lista di tutti gli utenti MySQL e i loro host corrispondenti.
Per cambiare il valore dell’host di un utente MySQl:
- Fate doppio clic sul campo dell’host accanto all’utente che volete cambiare (in rosso qui sotto).
- Scrivete
%
per permettere a chiunque di accedere a questo utente da qualsiasi luogo. Potresti anche cambiarlo con un IP remoto per una maggiore sicurezza. - Premi
ENTER
sulla tua tastiera per salvare le modifiche.
Non hai ancora finito. Ora devi pulire i privilegi di MySQL.
- Clicca di nuovo sulla scheda SQL
- Digita o incolla nella casella della query SQL:
FLUSH PRIVILEGES;
- Clicca su Go per eseguire la query.
Ora dovresti essere in grado di accedere da remoto.
Fammi sapere se questo ti ha aiutato. Seguimi su Twitter, Facebook e YouTube, o 🍊 comprami un frullato.
p.s. Ho aumentato le mie entrate AdSense del 200% usando AI 🤖. Leggi la mia recensione di Ezoic per scoprire come.