MySQL отказывается от подключения для пользователей с хостом%
У меня MySQL 5 с этим определено:
CREATE DATABASE foo DEFAULT CHARACTER SET = 'utf8';
GRANT ALL ON foo.* TO foo@'%' IDENTIFIED BY 'foo';
FLUSH PRIVILEGES;
Однако при доступе с пользователем foo
, проходить foo
, соединение отказано. Когда я изменяю это на
GRANT ALL ON foo.* TO foo@localhost IDENTIFIED BY 'foo';
MySQL впускает меня.Почему первый не работает? НАСКОЛЬКО МНЕ ИЗВЕСТНО, %
должно соответствовать чему угодно.
Обновление: найдено это, может быть связано http://forums.mysql.com/read.php?30,158830,158830
Ручные ссылки: (там ответа не найдено)
1 ответ
Из документации MySQL:
Очень распространенная ошибка - вставить новую запись с Host='%' и User='some_user', полагая, что это позволяет указать localhost для подключения с той же машины. Причина, по которой это не работает, заключается в том, что привилегии по умолчанию включают запись с Host = 'localhost' и User = ''. Поскольку эта запись имеет значение Host "localhost", которое является более конкретным, чем "%", она используется в предпочтении новой записи при подключении с localhost! Правильная процедура - вставить вторую запись с Host = 'localhost' и User = 'some_user' или удалить запись с Host = 'localhost' и User = ''. После удаления записи не забудьте выполнить оператор FLUSH PRIVILEGES, чтобы перезагрузить таблицы грантов. См. Также раздел 6.2.4, "Контроль доступа, этап 1: проверка соединения".
Проверьте mysql.user
таблица после выполнения ваших первых команд
CREATE DATABASE foo DEFAULT CHARACTER SET = 'utf8';
GRANT ALL ON foo.* TO foo@'%' IDENTIFIED BY 'foo';
FLUSH PRIVILEGES;
select * from mysql.user where User='foo';