Abilita connessione MySQL remota: ERRORE 1045 (28000): accesso negato per l'utente


136

MySQL 5.1.31 in esecuzione su Windows XP.

Dal server MySQL locale (192.168.233.142) posso collegarmi come root come segue:

>mysql --host=192.168.233.142 --user=root --password=redacted

Da una macchina remota (192.168.233.163), posso vedere che la porta mysql è aperta:

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

Ma quando provo a connettermi a mysql dalla macchina remota , ricevo:

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

Ho solo 2 voci in mysql.user:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

Cos'altro devo fare per abilitare l'accesso remoto?

MODIFICARE

Come suggerito da Paulo di seguito, ho provato a sostituire la voce mysql.user per% con una voce specifica IP, quindi la mia tabella utente ora è simile a questa:

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

Ho quindi riavviato la macchina, ma il problema persiste.

Risposte:


211

Devi metterlo come root:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

dove IP è l'IP a cui si desidera consentire l'accesso, USERNAME è l'utente che si utilizza per connettersi e PASSWORD è la password pertinente.

Se vuoi consentire l'accesso da qualsiasi IP, inserisci semplicemente il %tuo IP

e poi devi solo mettere

FLUSH PRIVILEGES;

O riavvia il server mysql e il gioco è fatto.


C'è un modo per farlo senza un client mysql locale?
cmcginty,

come rimuovere i privilegi di un IP specifico?
Umair Ayub,

4
stackoverflow.com/a/21151255/470749 mi ha aiutato anche perché credo che la mia impostazione dell'indirizzo di bind debba essere commentata. Concedere i privilegi remoti non è stato sufficiente per farlo funzionare.
Ryan,

8
Non spiegato nella risposta, ma sostituirlo PASSWORDcon la password dell'account. Ho provato il sopra cambiando solo USERNAMEed IPe non ha funzionato per me fino a quando ho cambiato PASSWORD.
Richard Parnaby-King,

Dopo aver fatto questo, seguire ciò che viene detto nel seguente risposta così: stackoverflow.com/a/21151255/445438
budhajeewa

85

Stavo ottenendo lo stesso errore dopo aver concesso l'accesso remoto fino a quando non ho fatto questo:

A partire dal /etc/mysql/my.cnf

Nelle versioni più recenti di mysql la posizione del file è /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(commenta questa riga bind-address = 127.0.0.1:)

Quindi corri service mysql restart.


6
Oppure,
cambialo

2
Solo commentare bind-addressnon ha funzionato per me. Sia bind-address = 0.0.0.0o bind-address = <server_ip>lavori.
chhantyal,

58

Di default nel server MySQL l'accesso remoto è disabilitato. Il processo per fornire un accesso remoto all'utente è.

  1. Vai alla mia cartella bin sql o aggiungila a PATH
  2. Accedi al root da mysql -uroot -proot(o qualunque sia la password di root.)
  3. Al successo otterrai mysql>
  4. Fornisci l'accesso a tutti per quell'utente.

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

Qui IP è l'indirizzo IP per il quale si desidera consentire l'accesso remoto, se inseriamo %qualsiasi indirizzo IP è possibile accedere in remoto.

Esempio:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

Questo per un altro utente.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Spero che questo possa aiutare


+1 per dettagli eccellenti, mi ha davvero aiutato a vedere che 0 rows affectedè la norma :) Inoltre, service mysqld restartè consigliato alla fine. [a mysqldvolte è solo mysql]
Nathan Dortman,

#Nota: per la versione 5.6+, utilizzare "grant all on ..." (senza i privilegi)
Nicke Manarin,

21

L'aiuto di Paulo mi porta alla soluzione. Era una combinazione di quanto segue:

  • la password conteneva un simbolo di dollaro
  • Stavo cercando di connettermi da una shell Linux

La shell bash considera il simbolo del dollaro come un carattere speciale per l' espansione in una variabile d'ambiente, quindi dobbiamo evitarlo con una barra rovesciata. Per inciso, non dobbiamo farlo nel caso in cui il simbolo del dollaro sia il carattere finale della password.

Ad esempio, se la tua password è "pas $ word", da Linux bash dobbiamo collegarci come segue:

# mysql --host=192.168.233.142 --user=root --password=pas\$word

4
Oltre a quanto sopra, controlla /etc/mysql/my.cnf e commenta bind-address = 127.0.0.1
Buminda

2
In alternativa si possono utilizzare le virgolette singole per prevenire l'espansione del $: mysql --host=192.168.233.142 --user=root --password='pas$word' stackoverflow.com/a/6697781/500942
jalanb

'$' nella password. Inestimabile. Grazie mille !!
Nagendra Kakarla,

dopo aver battuto la testa contro il monitor per un po 'mi sono imbattuto in questo e ha funzionato. Ho avuto una ! e @ nella mia password. Password modificata, privilegi scaricati e ci torno. Grazie!
AJM

9

Hai un firewall? assicurarsi che la porta 3306 sia aperta.

Su Windows, per impostazione predefinita viene creato l'account root mysql a cui è consentito l'accesso solo da localhost a meno che non sia stata selezionata l'opzione per abilitare l'accesso da macchine remote durante l'installazione.

creando o aggiornando l'utente desiderato con '%' come nome host.

esempio :

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';

6
Il server risponde con "ERRORE 1045 (28000): accesso negato per" ... se un blocco firewall avrà un timeout ...
Paulo H.

volevo solo pubblicare prima. my bad
Vamsi Krishna B,

@Krish - Tutto ciò che hai suggerito è già trattato nella domanda
Mike Chamberlain,

5
  1. Riprova flush privileges.

  2. Prova a riavviare il server per ricaricare le sovvenzioni.

  3. Prova a creare un utente con l'host "192.168.233.163". "%" sembra non consentire tutto (è strano)


Grazie, ci ho provato ma senza successo. Ho aggiornato la domanda con i tuoi suggerimenti.
Mike Chamberlain,

4
Prova a creare un altro utente e non dimenticare di impostare tutte le sovvenzioni:CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
Paulo H.

4

Nel mio caso stavo cercando di connettermi a un server mysql remoto su cent OS. Dopo aver esaminato molte soluzioni (concessione di tutti i privilegi, rimozione dei collegamenti IP, abilitazione della rete) il problema non veniva ancora risolto.

Alla fine, mentre esaminavo varie soluzioni, mi sono imbattuto in iptables, il che mi ha fatto capire che la porta mysql 3306 non accettava le connessioni.

Ecco una piccola nota su come ho verificato e risolto questo problema.

  • Verifica se la porta accetta connessioni:

    telnet (mysql server ip) [portNo]

  • Aggiunta della regola della tabella ip per consentire le connessioni sulla porta:

    iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCETTA

  • Non lo consiglierei per l'ambiente di produzione, ma se i tuoi iptables non sono configurati correttamente, l'aggiunta delle regole potrebbe non risolvere il problema. In tal caso, è necessario:

    il servizio iptables si ferma

Spero che questo ti aiuti.


3

se stai utilizzando un IP dinamico, concedi l'accesso al 192.168.2.%, quindi ora non devi preoccuparti di concedere l'accesso al tuo indirizzo IP ogni volta.


1

Ho avuto difficoltà con l'accesso remoto a MYSQL per la mia istanza di Amazon EC2 Linux. La soluzione è stata quella di assicurarsi che il mio gruppo di sicurezza includesse una regola in entrata per la porta MySQL 3306 per includere il mio indirizzo IP (o 0.0.0.0/0 ovunque). Immediatamente ho potuto connettermi in remoto non appena ho aggiunto questa regola.


1

La nuova posizione per il file di configurazione mysql è

/etc/mysql/mysql.conf.d/mysqld.cnf

0

MySQL ODBC 3.51 Driver è che i caratteri speciali nella password non vengono gestiti.

"Avvertenza - Potresti avere un forte mal di testa con MySQL ODBC 3.51 se la password nel tuo comando GRANT contiene caratteri speciali, come! @ # $% ^?. MySQL ODBC 3.51 ODBC Driver non supporta questi caratteri speciali nella casella della password. L'unico messaggio di errore che potresti ricevere è "Accesso negato" (utilizzando la password: SÌ) "- da http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/


0

La combinazione utente / host potrebbe essere stata creata senza password.

Supponevo che quando si aggiungeva un nuovo host per un utente esistente (usando un'app GUI), la password esistente sarebbe stata utilizzata anche per la nuova combinazione utente / host.

Potrei accedere con

mysql -u username -p PASSWORD

localmente, ma non da IPADDRESS con

mysql -u --host=HOST -p PASSWORD

(Potrei effettivamente accedere da IPADDRESS senza usare una password)

mysql -u --host=HOST

Impostazione della password consentita l'accesso:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';

1
Grazie, ho trascorso molto tempo a cercare di connettermi in remoto al mio server Mysql e questa linea mi ha aiutato molto. Quando ho impostato la password dell'utente, ho ricevuto l'errore ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal numberche mi ha portato a questo articolo: knowmysql.blogspot.com/2013/09/… Dopo aver seguito questi passaggi, ho potuto finalmente connettermi al server.
Andy Forceno,
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.