Mysql
 sql >> Database >  >> RDS >> Mysql

Accesso negato per l'utente 'test'@'ip'(usando la password:SÌ)

"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 .