Jag läser O ”Relly ”Learning MySQL” och det står att du kan skapa en användare i MySQL genom att göra just detta:
mysql> GRANT ALL ON *.* TO "jill"@"%.invyhome.com" IDENTIFIED BY "the_password"; Query OK, 0 rows affected (0.01 sec)
Men om jag försöker göra:
-> grant select on testgrounds.personas to ""@"localhost"; --> Error Code: 1133. Can"t find any matching row in the user table
Men det lyckades om jag använder ett lösenord:
->grant select on testgrounds.personas to ""@"localhost" identified by "pass"; --> 0 row(s) affected
Jag var tvungen att återställa behörigheterna för användarrot eftersom jag experimenterade och jag förstörde dem, så jag tror innan jag gjorde det kunde jag faktiskt använda uttalandet i boken (jag kommer inte ihåg 100%)
-> select current_user; --> "root@localhost" -> show grants; --> "GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"localhost\" IDENTIFIED BY PASSWORD \"*4ACFE3202A5FF5CF467898FC58AAB1D615029441\" WITH GRANT OPTION" --> "GRANT ALL PRIVILEGES ON `testgrounds`.* TO \"root\"@\"localhost\" WITH GRANT OPTION" --> "GRANT PROXY ON \"\"@\"\" TO \"root\"@\"localhost\" WITH GRANT OPTION"
Är det något fel med min MySQL-installation eller min konfiguration?
Svar
Detta är inte ett problem med MySQL installation eller inställning.
Varje kontonamn består av både ett användar- och värdnamn som ”användarnamn” @ ”värdnamn”, även om värdnamnet inte anges. Från MySQL Reference Manual:
MySQL-kontonamn består av ett användarnamn och ett värdnamn. Detta möjliggör skapande av konton för användare med samma namn som kan ansluta från olika värdar.
Detta gör det också möjligt för MySQL att ge olika behörighetsnivåer beroende på vilken värd som de använder för att ansluta.
När du uppdaterar bidrag för ett konto där MySQL inte känner igen värddelen kommer den att returnera en felkod 1133 såvida den inte har ett lösenord för att identifiera detta konto.
Dessutom MySQL tillåter att ett kontonamn endast anges av dess användarnamn, men i det här fallet behandlas det som ”användarnamn” @ ”%”.