„Odmowa dostępu dla użytkownika 'test'@'ip'(przy użyciu hasła:TAK)” jest błędem MySQL.
Oznacza to, że na poziomie sieci wszystko działa , ponieważ odmowa dostępu jako danemu użytkownikowi , serwer musiał zrozumieć, z którym użytkownikiem próbujesz się połączyć . Zatem sieć, zapora, routing itd. itd. wszystkie muszą działać; serwer musi nasłuchiwać itp.
Problem leży „po prostu” w uwierzytelnianiu .
Spróbuj połączyć się lokalnie z bazą danych (aby pominąć uwierzytelnianie) i sprawdź tabelę uprawnień:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
i pamiętaj, że wiersz, który Cię interesuje, to ten, w którym jest podany adres IP (ponieważ komunikat o błędzie określa adres IP i nie nazwa hosta - w takim przypadku mógł to być problem z DNS; nazwa hosta to nazwa hosta, z którego według serwera pochodzisz , a nie nazwę hosta, z którego tak naprawdę pochodzisz).
Dopasowanie użytkownika/hosta odbywa się z bardziej szczegółowych na mniej szczegółowe . Więc jeśli już miałeś:
user host password
test 1.2.3.4 foo
i pobiegł,
GRANT... TO [email protected]'%' ... PASSWORD bar
...ten grant będzie działał wszędzie z wyjątkiem 1.2.3.4, gdzie hasło pozostanie „foo”.
Z instrukcji (link powyżej):
Możesz być do tego zmuszony
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
aby upewnić się, że w tabeli grantów nie ma żadnych fałszywych wierszy odwołujących się do „testu” użytkownika.
(Ponadto DOTACJA powinna być, jak sądzę,
GRANT ALL PRIVILEGES ON databasename.*
)
Wątpliwość w zakresie bezpieczeństwa (niezwiązana z odpowiedzią)
Powyższa instrukcja mówi:Na specyfikę literalnego adresu IP nie ma wpływu to, czy ma on maskę sieci, więc 192.168.1.13 i 192.168.1.0/255.255.255.0 są uważane za równie szczegółowe .
Teraz na pierwszy rzut oka 127.0.0.1/0.0.0.0
wydaje się bardzo specyficzny (i nieszkodliwy) dla localhost . Maska sieci, jeśli się nie mylę, zapewnia, że jest równoważna %
, z wyjątkiem tego, że jest niezwykle specyficzny i zostanie uruchomiony jako pierwszy . Dlatego
test bar %
test localfoo 127.0.0.1/0.0.0.0
oznacza, że hasło do test
z dowolnego miejsca to wcale nie jest „bar”, ale jest „localfoo”.
Nikt nie wstawiłby takiej dotacji przez pomyłkę, ale jest błąd i błąd .