Я создал базу данных и пользователя и разрешил доступ через следующее:
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'.