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

O erro 1045 quer dizer uma coisa só: a ligação chegou à base de dados, e a base de dados recusou o par utilizador e palavra-passe. Não é um servidor em baixo nem uma porta fechada: é a credencial que não bate certo. 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 utilizador que a aplicação usou, e o YES ou NO diz se enviou alguma palavra-passe.

As causas, da mais à menos provável

O que a mensagem mostra A causa e a correcção
Utilizador sem o prefixo da conta (por exemplo util em vez de abc_util) No cPanel, nome da base e nome do utilizador levam o nome da conta à frente. Na aplicação vai o nome completo, tal como aparece em MySQL Databases.
using password: YES A palavra-passe enviada não é a deste utilizador. Alguém a mudou no cPanel e o ficheiro 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 palavra-passe nenhuma: o campo está vazio, o ficheiro de configuração não foi lido, ou a variável de ambiente (.env) não existe neste sítio.
A palavra-passe tem aspas, $, # ou @ O carácter partiu a linha de código ou o endereço de ligação. Gere uma palavra-passe nova só com letras e algarismos, em vez de lutar com o escape.
O endereço depois do @ não é localhost A ligação não vem da própria conta. De fora, a porta da base de dados está fechada; veja Remote MySQL e o túnel SSH.

Resolver, passo a passo

1 Abra o ficheiro onde a aplicação guarda os dados (a lista, programa a programa, está em onde cada aplicação guarda a ligação à base de dados). Faça uma cópia do ficheiro antes de mexer.
2 Confira o nome da base e do utilizador com o que o cPanel mostra em MySQL Databases, letra a letra, prefixo incluído. O servidor (host) é localhost.
3 Não adivinhe a palavra-passe: defina uma nova. Em MySQL Databases, na lista de utilizadores, escolha alterar a palavra-passe, gere uma e guarde-a. Cole exactamente essa no ficheiro, sem espaços a mais nas pontas.
4 Confirme que o utilizador 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 palavra-passe e diz logo se entra. Se entra, o defeito está no ficheiro da aplicação e não na base.
Mudar a palavra-passe 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 a sua própria base de dados?

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

Um utilizador por aplicação, com os privilégios de que precisa e mais nenhum. Se uma palavra-passe se perder, muda-se uma só. Veja criar um utilizador da base de dados com os privilégios certos.

Já refez o utilizador e a palavra-passe e o 1045 continua? Envie-nos a mensagem completa, com o nome do utilizador que ela mostra.

Abrir um pedido de suporte

VEJA TAMBÉM

Error establishing a database connection: as causas, por ordem

Criar um utilizador da base de dados com os privilégios certos

Onde cada aplicação guarda a ligação à base de dados

Erro 1044: quando o ficheiro tenta criar a base de dados

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?