sql >> Databasteknik >  >> RDS >> Mysql

Åtkomst nekad för användaren 'test'@'ip' (med lösenord:JA)

"Åtkomst nekad för användare 'test'@'ip'(med lösenord:JA)" är ett MySQL-fel.

Det betyder att allt fungerar på nätverksnivå , för att nekas åtkomst som en given användare , servern måste ha förstått vilken användare du försökte ansluta som . Så nätverk, brandvägg, routing och så vidare och så vidare måste alla fungera; servern måste lyssna osv.

Problemet ligger "helt enkelt" i autentiseringen .

Försök att ansluta lokalt till databasen (för att åsidosätta autentiseringen) och inspektera privilegietabellen:

USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';

och kom ihåg att raden du är intresserad av är den som nämner IP-adressen (eftersom felmeddelandet anger IP-adressen , och inte värdnamnet - i så fall kan det ha varit ett DNS-problem; värdnamnet är värdnamnet som servern tror att du kommer från , inte värdnamnet du egentligen kommer ifrån).

Användar-/värdmatchningen går från mer specifik till mindre specifik . Så om du redan hade:

user      host     password
test      1.2.3.4  foo

och sprang,

GRANT... TO [email protected]'%' ... PASSWORD bar

...det här anslaget skulle fungera från överallt utom 1.2.3.4, där lösenordet förblir 'foo'.

Från manualen (länk ovan):

Du kan bli tvungen att göra

USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

för att säkerställa att det inte finns några falska rader i bidragstabellen som hänvisar till användarens "test".

(Dessutom borde BIDRET vara, tycker jag,

GRANT ALL PRIVILEGES ON databasename.*

)

Säkerhetstvivel (inte relaterat till svaret)

Manualen ovan säger:Specificiteten hos en bokstavlig IP-adress påverkas inte av om den har en nätmask, så 192.168.1.13 och 192.168.1.0/255.255.255.0 anses vara lika specifika .

Nu vid en första anblick 127.0.0.1/0.0.0.0 verkar mycket specifik (och ofarlig) för localhost . Nätmasken, om jag inte har fel, säkerställer att den motsvarar % , förutom att den är otroligt specifik och körs först . Därför

test     bar         %           
test     localfoo    127.0.0.1/0.0.0.0

betyder att lösenordet för test var som helst är det inte "bar" alls, men det är "localfoo".

Ingen skulle lägga in ett sådant bidrag av misstag, men det finns misstag och misstag .



  1. Hur man hanterar användare och autentisering i MySQL

  2. PostgreSQL:The Versatile INSERT

  3. Hur kan jag använda JOIN i UPDATE-satsen?

  4. MySQL månadsförsäljning för de senaste 12 månaderna inklusive månader utan rea