1
resposta

Public Key Retrieval is not allowed

Quando eu tento conectar no meu banco mysql local, com usuario root em meu app em java/kotlin ou em uma ferramenta de banco de dados, se eu informar como endereço do banco "localhost", conecto corretamente, mas se eu informar o ip da maquina, por exemplo 192.168.15.187, dá erro

java.sql.SQLException: Access denied for user 'root'@'192.168.15.187' (using password: YES)

No Spring boot, ou o erro

"Public Key Retrieval is not allowed".

Consultei alguns foruns na internet e sugeriram um comando no console do mysql que não está passando, não importa a senha que eu informe

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

Se tento no DBeaver.

Se eu tentar conectar no console via comando:

mysql -u root -p

conecto normalmente, o problema é no meu app java/kotlin e em qualquer ferramenta de banco de dados.

Eu editei no arquivo mysql.conf o parâmetro:

bind-address		= 0.0.0.0

mas não adiantou.

Preciso liberar a conexão pelo IP (diferente de localhost) para conseguir rodar a minha aplicação via docker que não está encontrando o banco de dados em localhost.

1 resposta

Olá Cleyton, tudo bem?

Quando você tenta acessar o MySQL a partir de um endereço IP diferente, o MySQL trata isso como um host diferente. Neste caso, você precisa conceder ao usuário 'root' a permissão para acessar a partir de qualquer endereço IP.

Peço que teste o seguinte comando:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'sua_senha' WITH GRANT OPTION;
FLUSH PRIVILEGES;

O código acima concede ao usuário 'root' acesso de qualquer host ('%').

Quanto ao erro, ERROR 1819 (HY000): Your password does not satisfy the current policy requirements, você pode ajustar a política de senha temporariamente para facilitar a configuração:

SET GLOBAL validate_password.policy=LOW;

Já, no caso do Spring Boot, você pode tentar adicionar o parâmetro allowPublicKeyRetrieval=true na URL de conexão do banco de dados. Algo como:

jdbc:mysql://192.168.15.187:3306/seu_banco?allowPublicKeyRetrieval=true&useSSL=false

Recomendo reiniciar o serviço MySQL após qualquer alteração para garantir que as mudanças entrem em vigor.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado