Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Odmowa dostępu dla użytkownika 'test'@'ip' (przy użyciu hasła:TAK)

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak wybrać AVG wielu kolumn w jednym wierszu?

  2. Przekroczono limit czasu zapytania MySQL:(70100):Wykonywanie zapytania zostało przerwane

  3. Jaka jest różnica między mysql.createConnection i mysql.createPool w module Node.js MySQL?

  4. Wdróż relacyjne bazy danych MySQL na Ubuntu 12.04 (Precise Pangolin)

  5. Pisać rozpoczęcie sesji na 1 stronie czy na wszystkich stronach?