MySQL - ERRO 1045 (28000): Acesso negado ao usuário

9

Acabei de instalar uma nova cópia do Ubuntu 10.04.2 LTS em uma nova máquina. Entrei no MySQL como root:

david@server1:~$ mysql -u root -p123

Eu criei um novo usuário chamado repl. Deixei o host em branco, para que o novo usuário possa ter acesso a partir de qualquer local.

mysql> CREATE USER 'repl' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

Verifiquei a tabela de usuários para verificar se a nova substituição de usuário foi criada corretamente.

mysql> select host, user, password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| server1   | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 127.0.0.1 | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| ::1       | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| localhost |                  |                                           |
| server1   |                  |                                           |
| localhost | debian-sys-maint | *27F00A6BAAE5070BCEF92DF91805028725C30188 |
| %         | repl             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-----------+------------------+-------------------------------------------+
8 rows in set (0.00 sec)

Então saio, tento fazer login como usuário repl, mas o acesso é negado.

david@server1:~$ mysql -u repl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ mysql -urepl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ 

Por que o acesso é negado?

davidjhp
fonte
Eu apenas tentei largar o usuário e criar com o host localhost, e isso funcionou. CRIAR USUÁRIO 'repl' @ 'localhost' IDENTIFICADO POR '123'; Mas eu não quero restringir o usuário a algum host, eu preferiria ter qualquer host.
Davidjhp 28/03

Respostas:

5

O motivo pelo qual você não conseguiu fazer o login repl@'%'está relacionado ao protocolo de autenticação de usuário do MySQL . Não cobre padrões de usuários como se poderia acreditar.

Veja como você tentou fazer login

mysql -u repl -p123

Como você não especificou um endereço IP, o mysql assume que host é localhost e tenta se conectar através do arquivo de soquete. É por isso que a mensagem de erro diz Access denied for user 'repl'@'localhost' (using password: YES).

Alguém poderia pensar repl@'%'que permitiria repl@localhost. De acordo com a forma como o MySQL realiza a autenticação do usuário , isso simplesmente nunca acontece. Fazer isso ajudaria?

mysql -u repl -p123 -h127.0.0.1

Acredite ou não, o mysql tentaria repl@localhostnovamente. Por quê? O cliente mysql vê 127.0.0.1e tenta o arquivo de soquete novamente.

Tente assim:

mysql -u repl -p123 -h127.0.0.1 --protocol=tcp

Isso forçaria o cliente mysql a usar o protocolo TCP / IP explicitamente. Não teria outra opção senão o usuário repl@'%'.

RolandoMySQLDBA
fonte
4

Você deve emitir para localhost específico a ele.

  GRANT USAGE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123';

E tente se conectar.

Mannoj
fonte
1

O problema são essas duas contas, adicionadas por padrão.

http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html

+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost |                  |                                           |
| server1   |                  |                                           |
+-----------+------------------+-------------------------------------------+

Um nome de usuário em branco é um curinga, portanto, não importa qual conta você use, ele corresponderá a esse usuário se o MySQL achar que você está se conectando a partir do host local ou do nome do servidor local (servidor1 nesse caso) ... já que eles não têm senha, nenhum a senha que você tenta está errada. A autenticação do usuário tenta apenas a primeira correspondência, para que o usuário que você criou nunca seja notado quando o host for host local (ou o nome do servidor).

Exclua esses dois do mysql. usermesa e depois FLUSH PRIVILEGES;.

Ou, o script mysql_secure_installation pode fazer isso por você, embora eu prefira fazer as coisas manualmente.

http://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

Michael - sqlbot
fonte
0

Verifique se todos os campos no conector estão configurados com os detalhes corretos

host = "host local", usuário = "Usuário correto", senha = "coRrectPasswd", banco de dados = "CorreCTDB"

Verifique também se há erros em maiúsculas e minúsculas - 1045 não é um erro de sintaxe, mas está relacionado aos detalhes incorretos no conector

Johan Swan
fonte
0

O banco de dados pode não estar configurado ainda, basta emitir uma chamada sem argumento:

mysql <enter>

Server version: xxx

Copyright (c) xxx

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Mysql [(none)]> 

Se o Mysql precisar definir uma senha root, você poderá usar

mysql_secure_installation
TRicks43
fonte
-2

Isso pode ser um problema com a corrupção do seu banco de dados mysql. As tabelas dentro do banco de dados mysql, como a tabela user, podem ficar corrompidas e causar emissão.

Por favor, verifique esses

myisamchk / var / lib / mysql / mysql / * .MYI

Normalmente, ao verificar ou corrigir tabelas myisam, gostaríamos de remover o mysql primeiro. Se esse problema ainda não resolver, tente isso também.

Se eles estiverem corrompidos, você poderá corrigi-los usando

myisamchk --silent --force --fast /path/table-name.MYI

Obrigado,

Masood

Masood Alam
fonte