„Достъпът е отказан за потребител 'test'@'ip'(използвайки парола:ДА)" е грешка в MySQL.
Това означава, че на ниво мрежавсичко работи , защото да бъде отказан достъпкато даден потребител , сървърът трябва да е разбрал кой потребител се опитвате да се свържете като . Така че мрежата, защитната стена, маршрутизирането и така нататък и така нататък, всички трябва да работят; сървърът трябва да слуша и т.н..
Проблемът е "просто" в удостоверяването .
Опитайте да се свържете локално към базата данни (за да отмените удостоверяването) и проверете таблицата с привилегии:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
и не забравяйте, че редът, който ви интересува, е този, който споменава IP (тъй като съобщението за грешка определя IP , и не името на хоста - в този случай може да е проблем с DNS; името на хоста е името на хоста, от което сървърът смята, че идвате , а не името на хоста, от което наистина идвате).
Съвпадението потребител/хост идва от по-конкретно до по-малко конкретни . Така че, ако вече сте имали:
user host password
test 1.2.3.4 foo
и побягна,
GRANT... TO [email protected]'%' ... PASSWORD bar
...тази субсидия ще работи отвсякъде освен 1.2.3.4, където паролата ще остане 'foo'.
От ръководството (линк по-горе):
Може да сте принудени да го направите
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
за да се гарантира, че в таблицата за предоставяне няма фалшиви редове, отнасящи се до потребителския „тест“.
(Също така, GRANT трябва да бъде, според мен,
GRANT ALL PRIVILEGES ON databasename.*
)
Съмнение в сигурността (несвързано с отговора)
Ръководството по-горе казва:Специфичността на буквалния IP адрес не се влияе от това дали има мрежова маска, така че 192.168.1.13 и 192.168.1.0/255.255.255.0 се считат за еднакво специфични .
Сега от пръв поглед 127.0.0.1/0.0.0.0
изглежда много специфично (и безобидно) за localhost . Мрежовата маска, ако не се лъжа, гарантира, че е еквивалентна на %
, освен че е невероятно специфичен и ще се изпълнява първи . Следователно
test bar %
test localfoo 127.0.0.1/0.0.0.0
означава, че паролата за test
отвсякъде изобщо не е "бар", а е "localfoo".
Никой не би добавил такова разрешение по погрешка, но има грешка и грешка .