Назад | Перейти на главную страницу

Allowing wildcard (%) access on MySQL db, getting error “access denied for '<user>'@' localhost '»</user>

Я создал базу данных и пользователя и разрешил доступ через следующее:

create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;

однако, когда я пытаюсь подключиться к MySQL, я получаю следующую ошибку:

$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)

Если "%" - это подстановочный знак, то не будет ли он также включать localhost? Однако, если я не укажу, что хочу использовать пароль, я могу нормально подключиться к базе данных, что не имеет смысла, потому что я указываю пароль при создании пользователя.

Попробуйте подключиться к mysql -u someuser -p -h 127.0.0.1.

Если вы можете подключиться без пароля, вы либо сохранили учетные данные в .my.cnf, либо создали учетную запись, которая разрешает доступ без пароля.


Этот комментарий из документации mysql также может быть связан.

http://dev.mysql.com/doc/refman/5.1/en/access-denied.html

Если вы не можете понять, почему вы получаете отказ в доступе, удалите из таблицы пользователей все записи, которые имеют значения Host, содержащие подстановочные знаки (записи, содержащие символы "%" или "_"). Очень распространенной ошибкой является вставка новой записи с Host = '%' и User = 'some_user', думая, что это позволяет вам указать localhost для подключения с той же машины. Причина, по которой это не работает, заключается в том, что привилегии по умолчанию включают запись с Host = 'localhost' и User = ''. Поскольку эта запись имеет значение хоста «localhost», более конкретное, чем «%», оно используется вместо новой записи при подключении с localhost! Правильная процедура - вставить вторую запись с Host = 'localhost' и User = 'some_user' или удалить запись с Host = 'localhost' и User = ''.

Я почти уверен, что вам понадобится следующее:

предоставить все привилегии на somedb. * 'someuser' @ '%' с опцией предоставления;

В вашем операторе GRANT отсутствует объявление имени хоста.

Если вы не можете подключиться к mysql с помощью someuser @ '%', где '%' - это подстановочный знак для имени хоста, убедитесь, что в вашей таблице пользователей нет записи @localhost. Подтвердите, используя следующий оператор SQL:

    mysql> SELECT * FROM user WHERE user='' AND host='localhost';

Если существует '' @localhost, удалите его, выполнив следующий оператор SQL:

    mysql> DELETE FROM user WHERE user='' AND host='localhost';

потом наконец

    FLUSH PRIVILEGES;

Теперь какой-нибудь пользователь @ '%' подключится к базе данных.

Насколько я понимаю и готов быть исправленным по этому поводу, MySQL обрабатывает localhost отдельно для%. т.е. localhost не включен в подстановочный знак.

Ты бежишь flush privileges; после создания пользователя? Если вы этого не сделаете, изменения пользователей / разрешений не вступят в силу до перезапуска сервера.

Затем убедитесь, что у вас нет записи '%' @ 'localhost'.