Permitindo o acesso curinga (%) no banco de dados MySQL, obtendo o erro “access denied for 'user' @ 'localhost'”

13

Eu criei um banco de dados e um usuário e permiti acesso por meio do seguinte:

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

no entanto, quando tento me conectar ao MySQL, recebo o seguinte erro:

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

Se "%" é o caractere curinga, ele também não habilitará o host local? No entanto, se eu não especificar que desejo usar uma senha, posso conectar-me muito bem ao banco de dados, o que não faz sentido, porque estou especificando uma senha quando criei o usuário.

    
por Wayne Molina 15.03.2010 / 06:28

5 respostas

13

Tente se conectar com mysql -u someuser -p -h 127.0.0.1 .

Se você conseguir se conectar sem uma senha, você salvou as credenciais em um .my.cnf ou criou uma conta que permite o acesso sem uma senha.

Esse comentário dos documentos do mysql também pode estar relacionado.

link

If you cannot figure out why you get Access denied, remove from the user table all entries that have Host values containing wildcards (entries that contain '%' or '_' characters). A very common error is to insert a new entry with Host='%' and User='some_user', thinking that this allows you to specify localhost to connect from the same machine. The reason that this does not work is that the default privileges include an entry with Host='localhost' and User=''. Because that entry has a Host value 'localhost' that is more specific than '%', it is used in preference to the new entry when connecting from localhost! The correct procedure is to insert a second entry with Host='localhost' and User='some_user', or to delete the entry with Host='localhost' and User=''.

    
por 15.03.2010 / 06:58
7

Tenho certeza que você precisa do seguinte:

concede todos os privilégios em somedb. * para 'someuser' @ '%' com opção de concessão;

Sua declaração GRANT não possui uma declaração de nome de host.

    
por 15.03.2010 / 19:45
6

Se você não conseguir conectar-se ao mysql usando algum usuário @ '%', onde '%' é o curinga do nome do host, certifique-se de não ter a entrada '' localhost 'em sua tabela de usuários. Confirme usando a seguinte instrução SQL:

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

Se '' @ localhost já existir, remova-o emitindo a seguinte instrução SQL:

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

então finalmente

    FLUSH PRIVILEGES;

Agora someuser @ '%' se conectará ao banco de dados.

    
por 19.07.2011 / 15:08
4

Meu entendimento, e estou preparado para ser corrigido, é que o MySQL trata localhost separadamente para%. isto é, o localhost não está incluído no curinga.

    
por 15.03.2010 / 11:23
0

Você executou flush privileges; depois de criar o usuário? Se você não fizer isso, as alterações para usuários / permissões não serão necessárias até que o servidor seja reiniciado.

Em seguida, verifique se você não tem uma entrada '%' @ 'localhost'.

    
por 15.03.2010 / 06:40

Tags