Estou lendo O “Relly “Aprendendo MySQL” e diz que você pode criar um usuário no MySQL fazendo exatamente isto:
mysql> GRANT ALL ON *.* TO "jill"@"%.invyhome.com" IDENTIFIED BY "the_password"; Query OK, 0 rows affected (0.01 sec)
Mas se eu tentar fazer:
-> grant select on testgrounds.personas to ""@"localhost"; --> Error Code: 1133. Can"t find any matching row in the user table
Mas é bem-sucedido se eu usar uma senha:
->grant select on testgrounds.personas to ""@"localhost" identified by "pass"; --> 0 row(s) affected
Tive que restaurar os privilégios para usuário root porque estava experimentando e os baguncei, então acho que antes de fazer isso eu poderia realmente usar a instrução do livro (não me lembro 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"
Há algo errado com minha instalação ou configuração do MySQL?
Resposta
Este não é um problema com o MySQL instalação ou configuração.
Cada nome de conta consiste em um usuário e um nome de host, como “user_name” @ “host_name”, mesmo quando o nome do host não é especificado. De Manual de referência do MySQL:
Os nomes das contas MySQL consistem em um nome de usuário e um nome de host. Isso permite a criação de contas para usuários com o mesmo nome que podem se conectar de diferentes hosts.
Isso também permite que o MySQL conceda diferentes níveis de permissões, dependendo de qual host que eles usam para se conectar.
Ao atualizar concessões para uma conta onde o MySQL não reconhece a parte do host, ele retornará um código de erro 1133, a menos que tenha uma senha para identificar esta conta.
Além disso, O MySQL permitirá que um nome de conta seja especificado apenas por seu nome de usuário, mas neste caso é tratado como “user_name” @ “%”.