Come concedere le autorizzazioni di accesso remoto al server mysql per l'utente?


118

Se lo faccio SHOW GRANTSnel mio database mysql ottengo

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

Se non sbaglio, root@localhostsignifica che l'utente rootpuò accedere al server solo da localhost. Come faccio a dire a MySQL di concedere rootil permesso di accedere a questo server mysql anche da ogni altra macchina (nella stessa rete)?


6
La semplice modifica localhosta %garantirà l'accesso root alla rete pubblica. Non dimenticare diflush privileges;

6
L'aggiunta di root @% ti espone a molti rischi e non dovrebbe essere eseguita. So che questo è un vecchio post, ma l'avvertimento dovrebbe essere qui. L'account root è il primo account preso di mira dagli aggressori e root @ '%' significa che l'utente root può connettersi al tuo account MySQL da qualsiasi luogo desideri. Ci sono troppe cose da coprire nei commenti, ma dovresti provare a rimuovere il maggior numero possibile di utenti @ '%' e tutti quelli dichiarati in questo dovrebbero avere privilegi molto limitati. Qualunque cosa accada, non dovresti assolutamente aggiungere root @ '%' e le tue applicazioni non dovrebbero aspettarsi la presenza di quell'account.
Damon


Ehi ragazzi, dovreste rimuovere la stringa PASSWORD da questo comando ... sta causando un errore ... basta finire con IDENTIFIED BY e poi la password stessa.
Mário de Sá Vera

Risposte:


143

Ciò garantisce l'accesso root con la stessa password da qualsiasi macchina in *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Se la risoluzione dei nomi non funziona, puoi anche concedere l'accesso tramite IP o sottorete:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%'
    IDENTIFIED BY 'some_characters'  
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

GRANTDocumenti sulla sintassi di MySQL .


15
Presumo ...TO 'root'@'%' IDENTIFIED...che concederebbe l'accesso da qualsiasi luogo?
Aufwind

3
Ho eseguito il comando in mysql, ma SHOW GRANTSmostra ancora lo stesso (come nella mia domanda). L'ho anche fatto FLUSH PRIVILGES. C'è qualcosa che mi manca?
Aufwind

@ Aufwind non ti esonererei ad aver bisogno di nient'altro oltre FLUSH PRIVILEGES. Disconnettiti e accedi nuovamente, riavvia il servizio mysqld se hai accesso. Inoltre, assicurati che la skip networkinglinea non sia abilitata nel tuo my.cnfsebbene ciò non spiegherebbe il tuo SHOW GRANTSnon essere ancora lo stesso.
Michael Berkowski

@Aufwind In caso contrario, potresti dover chiedere su ServerFault.com.
Michael Berkowski

10
Notare che IDENTIFIED BY PASSWORDè accompagnato da un numero esadecimale di 41 cifre con hash. Utilizzare IDENTIFIED BY 'password'se si desidera includere direttamente la password.
Rainulf

94

Provare:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;

1
umm cosa Pa55w0rdsembra stupido, non dirmi che è la password che vuoi creare. Per tutti coloro che cercano di accedere al tuo mysql?
S ha parlato il

23
È comunemente usato solo per dare un segnaposto alla password, dicendo "metti la tua password di lettura corretta in questo posto".
moshe beeri

2
Questo comando con la solita avvertenza che vorresti usarlo solo per applicazioni in cui la sicurezza non è un problema, ad esempio dev o QA.
einnocent

se non funziona su Mac prova a cambiare "root" @ "%" con "root" @ "localhost" o / etc / hosts del computer a cui stai concedendo i privilegi.
moshe beeri

2
Non dimenticare di eseguire questo dopo:FLUSH PRIVILEGES;
dane

44

È necessario eseguire alcuni passaggi per assicurarsi che prima mysql e quindi l'utente root siano accessibili dall'esterno:

  1. Disabilita skip-networkingin my.cnf(es . /etc/mysql/my.cnf:)

  2. Controlla il valore di bind-addressin my.cnf, se è impostato su 127.0.0.1, puoi cambiarlo in 0.0.0.0per consentire l'accesso da tutti gli IP o da qualsiasi IP da cui desideri connetterti.

  3. Concedi l'accesso remoto all'utente root da qualsiasi ip (o specifica il tuo ip invece di %)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
  4. Riavvia il servizio mysql:

    sudo service mysql restart

È inoltre necessario aprire la porta mysql 3306 dal firewall altrimenti i client remoti non si connetteranno
David Okwii

Solo un breve avviso al punto 2 da @Khashayar: 0.0.0.0 significa qualsiasi indirizzo IPv4. * significa QUALSIASI indirizzo, sia esso IPv4 o IPv6.
Gustavo Pinsard

34
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  

*.* = DB.TABLE è possibile limitare l'utente a database specifici e tabelle specifiche.

'root'@'%'puoi cambiare root con qualsiasi utente che hai creato e% è quello di consentire tutti gli IP. Puoi limitarlo cambiando anche% .168.1.1 ecc.


Se il problema persiste, modifica anche my.cnf o my.ini e commenta queste righe

bind-address = 127.0.0.1a #bind-address = 127.0.0.1
e
skip-networkinga#skip-networking

  • Riavvia MySQL e ripeti nuovamente i passaggi precedenti.

Raspberry Pi, ho trovato la configurazione dell'indirizzo di bind sotto \etc\mysql\mariadb.conf.d\50-server.cnf


2
Solo risposta che spiega la parte *.*e 'user'@'address'. Grazie! :)
Philipp

Concedere TUTTO su . invita gli hacker ad entrare.
Rick James

ecco perché ho spiegato *. *
Wasim A.

8

Quelle concessioni SQL che gli altri condividono funzionano. Se non riesci ancora ad accedere al database, è possibile che tu abbia solo una restrizione del firewall per la porta. Dipende dal tipo di server (e da eventuali router in mezzo) da come aprire la connessione. Aprire la porta TCP 3306 in entrata e assegnarle una regola di accesso simile per le macchine esterne (tutto / sottorete / singolo IP / ecc.).


4

Apri il /etc/mysql/mysql.conf.d/mysqld.cnffile e commenta la riga seguente:

#bind-address = 127.0.0.1

Lavorando su Ubuntu 19.4
Ngô Văn Thao

3

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 di binding ip, abilitazione della rete) il problema non veniva ancora risolto.

Come si è scoperto, mentre cercavo varie soluzioni, mi sono imbattuto in iptables, che mi ha fatto capire che la porta mysql 3306 non accettava connessioni.

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

  • Verifica se la porta accetta le connessioni:
telnet (ip server mysql) [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 il tuo iptables non è configurato correttamente, l'aggiunta delle regole potrebbe non risolvere ancora il problema. In tal caso dovrebbe essere fatto quanto segue:

servizio iptables stop

Spero che questo ti aiuti.


3

Due passaggi:

  1. configura utente con carattere jolly:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    aggiungi quanto segue:
    bind-address=0.0.0.0

riavvia il server, non dovresti avere problemi a connetterti ad esso.


Di seguito, viene visualizzato "ERRORE 1827 (HY000): l'hash della password non ha il formato previsto. Verificare se viene utilizzato l'algoritmo della password corretto con la funzione PASSWORD ()". Puoi spiegare cosa sto sbagliando qui?
lampShadesDrifter

2

Con mysql 8 e versioni successive, non è possibile aggiungere un utente concedendo privilegi. significa con questa query:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'type-root-password-here' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysql restituirà questo errore:

ERRORE 1064 (42000): hai un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a 'IDENTIFICATO DA' password scritta 'alla riga 1

questo significa che non hai un utente root per% domain. quindi è necessario prima inserire l'utente e poi concedere privilegi come questo:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

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

mysql> FLUSH PRIVILEGES;

Non dimenticare di sostituire le password con le tue password specifiche.


0

Questo ha funzionato per me. Ma c'era uno strano problema che anche io ho provato prima quelli che non interessava. Ho aggiornato la pagina phpmyadmin e ho funzionato in qualche modo.

Se hai bisogno di accedere a local-xampp-mysql. Puoi andare su xampp-shell -> aprire il prompt dei comandi.

Quindi mysql -uroot -p --port = 3306 o mysql -uroot -p (se è stata impostata la password). Dopodiché puoi concedere quegli accessi dalla pagina della shell di mysql (puoi anche lavorare da localhost / phpmyadmin).

Basta aggiungerli se qualcuno trova questo argomento e ha problemi con i principianti.


0

Ubuntu 18.04

Installa e assicurati che mysqld sia in esecuzione ..

Vai nel database e imposta l'utente root:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Modifica i permessi di mysqld e riavvia:

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

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

Da un'altra macchina, prova .. La porta Obvs (3306) sulla macchina mysqld deve consentire la connessione dalla macchina di prova.

mysql -u root -p -h 123.456.789.666

Tutta la "sicurezza" aggiuntiva di MySql non aiuta affatto la sicurezza, si limita a complicare e offuscare, ora è effettivamente più facile rovinare tutto che ai vecchi tempi, dove si utilizzava solo una password molto lunga.

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.