Erro 1045 Access denied for user: as causas, por ordem

Bancos de Dados··· 331 visualizações· 4 min de leitura

O erro 1045 quer dizer uma coisa só: a conexão chegou ao banco de dados, e o banco de dados recusou o par usuário e senha. Não é um servidor fora do ar nem uma porta fechada: é a credencial que não confere. Quase sempre resolve-se em dez minutos, desde que se procure pela ordem certa.

A mensagem completa traz duas pistas que valem ouro: Access denied for user 'abc_util'@'localhost' (using password: YES). O nome entre aspas é o usuário que a aplicação usou, e o YES ou NO diz se enviou alguma senha.

As causas, da mais à menos provável

O que a mensagem mostra A causa e a correção
Usuário sem o prefixo da conta (por exemplo util em vez de abc_util) No cPanel, nome da base e nome do usuário levam o nome da conta à frente. Na aplicação vai o nome completo, tal como aparece em MySQL Databases.
using password: YES A senha enviada não é a deste usuário. Alguém a mudou no cPanel e o arquivo de configuração ficou com a antiga, ou a cópia veio de outro servidor com a de lá.
using password: NO A aplicação não enviou senha nenhuma: o campo está vazio, o arquivo de configuração não foi lido, ou a variável de ambiente (.env) não existe neste lugar.
A senha tem aspas, $, # ou @ O caractere partiu a linha de código ou o endereço de ligação. Gere uma senha nova só com letras e algarismos, em vez de lutar com o escape.
O endereço depois do @ não é localhost A conexão não vem da própria conta. De fora, a porta do banco de dados está fechada; veja Remote MySQL e o túnel SSH.

Resolver, passo a passo

1 Abra o arquivo onde a aplicação guarda os dados (a lista, programa a programa, está em onde cada aplicação guarda a conexão ao banco de dados). Faça uma cópia do arquivo antes de mexer.
2 Confira o nome da base e do usuário com o que o cPanel mostra em MySQL Databases, letra a letra, prefixo incluído. O servidor (host) é localhost.
3 Não adivinhe a senha: defina uma nova. Em MySQL Databases, na lista de usuários, escolha alterar a senha, gere uma e guarde-a. Cole exatamente essa no arquivo, sem espaços a mais nas pontas.
4 Confirme que o usuário está ligado à base. Em Add User To Database junte os dois e dê os privilégios. Sem esta ligação o erro muda para o 1044, descrito em Erro 1044.
5 Se tem SSH, prove as credenciais fora do site: mysql -u abc_util -p abc_base pede a senha e diz logo se entra. Se entra, o defeito está no arquivo da aplicação e não na base.
Mudar a senha da base e esquecer a aplicação é a causa número um, e a aplicação passa a mostrar «Error establishing a database connection». Mude sempre os dois lados no mesmo momento. O diagnóstico completo de um site está em Error establishing a database connection: as causas, por ordem.

E num VPS com o seu próprio banco de dados?

O erro Access denied for user 'root'@'localhost' é dos mais pesquisados. Em muitas instalações (Ubuntu e Debian, por exemplo) o usuário root do banco de dados não entra com senha: entra pelo sistema, com sudo mysql. Quem tenta uma senha inventada recebe o 1045. Num VPS estes comandos e o banco de dados são seus; veja até onde vai o nosso apoio em até onde vai o nosso suporte.

Um usuário por aplicação, com os privilégios de que precisa e mais nenhum. Se uma senha se perder, muda-se uma só. Veja criar um usuário do banco de dados com os privilégios certos.

Já refez o usuário e a senha e o 1045 continua? Envie-nos a mensagem completa, com o nome do usuário que ela mostra.

Abrir um pedido de suporte

VEJA TAMBÉM

Error establishing a database connection: as causas, por ordem

Criar um usuário do banco de dados com os privilégios certos

Onde cada aplicação guarda a conexão ao banco de dados

Erro 1044: quando o arquivo tenta criar o banco de dados

PRODUTO RECOMENDADO

Hospedagem de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde R$ 36,30/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.