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';
Другие вопросы по тегам