1
resposta

[Sugestão] Erro ao utilizar o padrão usando senha na url de conexão

Com objetivo de ajudar, queria deixar uma sugestão, caso estejam tendo dificuldades na conexão retornando "java.sql.SQLException: Access denied for user 'root'@'192.168.127.1' (using password: YES)", e que já tenham realizado a verificação de se a senha esta correta, se o usuário existe e se existe permissões concedidas provável que sua senha tenha caracteres especial, então ao invés de passar tudo na url passe como parâmetros.

Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3307/MysqlJava?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC",
"SeuUsuario",
"SuaSenha"
);

1 resposta

Olá, Pablo! Tudo bem?

Sua contribuição é extremamente valiosa para a comunidade! O erro de Access denied é um dos obstáculos mais comuns para quem está iniciando com JDBC, e sua análise sobre caracteres especiais na URL de conexão toca em um ponto técnico muito importante.

Como Analista, você identificou corretamente que, ao embutir a senha diretamente na String da URL, caracteres como @, # ou & podem ser interpretados erroneamente pelo driver do banco de dados como parte da estrutura do protocolo, causando falha na autenticação.

Sua sugestão de utilizar o método DriverManager.getConnection com argumentos separados para usuário e senha é a melhor prática recomendada por vários motivos:

  • Segurança de Sintaxe: Passar as credenciais como parâmetros isolados garante que o driver trate a senha como um dado puro, sem risco de interferir nos parâmetros da URL (como useSSL ou serverTimezone).
  • Organização do Código: O código fica visivelmente mais limpo, separando o endereço do servidor (URL) das credenciais de acesso.
  • Flexibilidade: Essa estrutura facilita muito a evolução para o uso de variáveis de ambiente, o que evita deixar senhas expostas diretamente no código-fonte em projetos reais.

Dica Técnica Adicional:

Além da solução que você apresentou, se o erro persistir mesmo com a senha correta, vale verificar se o usuário do banco (ex: root) tem permissão de acesso para o host específico que aparece na mensagem de erro (no seu exemplo, @'192.168.127.1'), já que o MySQL diferencia acessos de localhost de acessos via IPs de rede.

Parabéns pelo excelente nível de compartilhamento e pelo impressionante XP na plataforma! É esse tipo de proatividade que ajuda a elevar o nível técnico de todos os alunos.

Espero que sua dica ajude muitos colegas que passarem por esse desafio!