Utworzyłem bazę danych i użytkownika i zezwoliłem na dostęp poprzez:
create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;
jednak przy próbie połączenia z MySQL pojawia się następujący błąd:
$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)
Jeśli „%” jest symbolem wieloznacznym, to czy nie włączy również hosta lokalnego? Jeśli jednak nie określę, że chcę użyć hasła, mogę połączyć się z bazą danych w porządku, co nie ma sensu, ponieważ określam hasło podczas tworzenia użytkownika.
Jestem pewien, że potrzebujesz:
przyznaj wszystkie uprawnienia na somedb. * do 'someuser' @ '%' z opcją grant;
W wyciągu GRANT brakuje deklaracji nazwy hosta.
źródło
GRANT ALL ON somedb.* TO 'someuser'@'10.1.10.1';
Jeśli nie możesz połączyć się z mysql za pomocą użytkownika @ '%', gdzie '%' jest symbolem wieloznacznym nazwy hosta, upewnij się, że nie masz wpisu @localhost w tabeli użytkowników. Potwierdź za pomocą następującej instrukcji SQL:
Jeśli istnieje „@localhost”, usuń go, wydając następującą instrukcję SQL:
potem w końcu
Teraz someuser @ '%' połączy się z bazą danych.
źródło
Rozumiem i jestem przygotowany na to, że MySQL traktuje localhost osobno do%. tzn. localhost nie jest ujęty w symbol wieloznaczny.
źródło
user@%
i nie działało, dopóki nie włączyłemuser@localhost
. Potem zobaczyłem odpowiedź stackoverflow.com/a/29421084/4850646 i zdałem sobie sprawę, że mam anonimowego użytkownika z hostemlocalhost
. Usunąłem wszystkich anonimowych użytkowników i mogłem uzyskać do nich dostęplocalhost
, nawet po usunięciuuser@localhost
(i tylko pozwoleniuuser@%
). Wydaje się, że ponieważlocalhost
jest bardziej konkretny%
, najpierw próbujelocalhost
użytkownika, nawet jeśli jest to użytkownik anonimowy!Czy działałeś
flush privileges;
po utworzeniu użytkownika? Jeśli tego nie zrobisz, zmiany w użytkownikach / uprawnieniach zostaną wprowadzone dopiero po ponownym uruchomieniu serwera.Następnie sprawdź, czy nie masz wpisu „%” @ „localhost”.
źródło