"Accesso negato per l'utente 'test'@'ip'(utilizzando la password:YES)" è un errore MySQL.
Ciò significa che a livello di rete tutto funziona , perché gli viene negato l'accesso come un determinato utente , il server deve aver capito con quale utente stavi tentando di connetterti . Quindi rete, firewall, routing e così via, devono funzionare tutti; il server deve essere in ascolto, ecc.
Il problema risiede "semplicemente" nell'autenticazione .
Prova a connetterti localmente al database (per ignorare l'autenticazione) e controlla la tabella dei privilegi:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
e ricorda che la riga che ti interessa è quella che menziona l'IP (poiché il messaggio di errore specifica l'IP e non il nome host - nel qual caso, potrebbe essere stato un problema DNS; il nome host è il nome host da cui il server crede provieni , non il nome host da cui provieni realmente).
La corrispondenza utente/host va da più specifico a meno specifico . Quindi se avevi già:
user host password
test 1.2.3.4 foo
e corse,
GRANT... TO [email protected]'%' ... PASSWORD bar
...questa sovvenzione funzionerebbe ovunque tranne 1.2.3.4, dove la password rimarrebbe 'foo'.
Dal manuale (link sopra):
Potresti essere costretto a farlo
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
per garantire che non ci siano righe spurie nella tabella di concessione che fanno riferimento all'utente 'test'.
(Inoltre, la GRANT dovrebbe essere, credo,
GRANT ALL PRIVILEGES ON databasename.*
)
Dubito di sicurezza (non correlato alla risposta)
Il manuale sopra dice:La specificità di un indirizzo IP letterale non è influenzata dal fatto che abbia una maschera di rete, quindi 192.168.1.13 e 192.168.1.0/255.255.255.0 sono considerati ugualmente specifici .
Ora a prima vista 127.0.0.1/0.0.0.0
sembra molto specifico (e innocuo) per localhost . La netmask, se non sbaglio, assicura che sia equivalente a %
, tranne che è incredibilmente specifico e verrà eseguito per primo . Pertanto
test bar %
test localfoo 127.0.0.1/0.0.0.0
significa che la password per test
da qualsiasi luogo non è affatto "bar", ma è "localfoo".
Nessuno inserirebbe una tale sovvenzione per errore, ma c'è un errore e un errore .