MySQL - ERRORE 1045 (28000): accesso negato per l'utente


9

Ho appena installato una nuova copia di Ubuntu 10.04.2 LTS su una nuova macchina. Ho effettuato l'accesso a MySQL come root:

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

Ho creato un nuovo utente chiamato repl. Ho lasciato l'host vuoto, quindi il nuovo utente può avere accesso da qualsiasi posizione.

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

Ho controllato la tabella degli utenti per verificare che il nuovo utente sost fosse stato creato correttamente.

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)

Quindi esco, provo ad accedere come utente sostituto, ma l'accesso è negato.

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:~$ 

Perché l'accesso è negato?


Ho appena provato a far cadere l'utente e a crearlo con l'host localhost, e questo ha funzionato. CREA UTENTE 'sostituisci' @ 'localhost' IDENTIFICATO DA '123'; Ma non voglio limitare l'utente a qualche host, preferirei avere un host.
davidjhp,

Risposte:


5

Il motivo per cui non è stato possibile effettuare l'accesso repl@'%'ha a che fare con il protocollo di autenticazione utente di MySQL . Non copre i modelli di utenti come si potrebbe credere.

Guarda come hai provato ad accedere

mysql -u repl -p123

Poiché non è stato specificato un indirizzo IP, mysql presuppone che host sia localhost e tenta di connettersi tramite il file socket. Questo è il motivo per cui viene visualizzato il messaggio di errore Access denied for user 'repl'@'localhost' (using password: YES).

Si potrebbe pensare repl@'%'che permetterebbe repl@localhost. Secondo come MySQL esegue l'autenticazione utente , ciò non accadrà mai. Farebbe questo aiuto?

mysql -u repl -p123 -h127.0.0.1

Che ci crediate o no, mysql ci riproverebbe repl@localhost. Perché? Il client mysql vede 127.0.0.1e prova nuovamente il file socket.

Provalo in questo modo:

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

Ciò costringerebbe il client mysql a utilizzare esplicitamente il protocollo TCP / IP. Non avrebbe quindi altra scelta che l'utente repl@'%'.


4

È necessario emettere localhost specifico per esso.

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

E prova a connetterti.


1

Il problema sono questi due account, aggiunti per impostazione predefinita.

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

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

Un nome utente vuoto è un carattere jolly, quindi indipendentemente dall'account utilizzato, corrisponde a questo utente se MySQL pensa che ti stai connettendo da localhost o dal nome del tuo server locale (server1 in questo caso) ... poiché non hanno password, nessun la password che provi è sbagliata. L'autenticazione utente prova solo la prima corrispondenza, quindi l'utente che hai creato non viene mai notato quando il tuo host è localhost (o il nome del tuo server).

Elimina questi due dal mysql. usertavolo e poi FLUSH PRIVILEGES;.

Oppure, lo script mysql_secure_installation può fare questo per te, anche se tendo a preferire fare le cose manualmente.

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


0

Assicurarsi che tutti i campi nel connettore siano impostati con i dettagli corretti

host = "localhost", user = "CorrectUser", passwd = "coRrectPasswd", database = "CorreCTDB"

Controlla anche gli errori maiuscoli e minuscoli: 1045 non è un errore di sintassi, ma ha a che fare con dettagli errati nel connettore


0

Il database potrebbe non essere configurato ma emettere semplicemente una chiamata no-arg:

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 Mysql deve essere impostato una password di root, è possibile utilizzare

mysql_secure_installation

-2

Questo potrebbe essere un problema con la corruzione del tuo database mysql. Le tabelle all'interno del database mysql come la tabella utente possono essere danneggiate e possono causare l'emissione.

Si prega di fare un controllo su quelli

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

Di solito durante il controllo o la correzione delle tabelle myisam vorremmo prima eliminare mysql. Se il problema persiste, provare anche questo.

Se sono corrotti, puoi ripararli usando

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

Grazie,

Masood

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.