2012-04-19 13 views
47

Ho utilizzato SQL Server e ora sto utilizzando MySQL per un progetto. Con SQL Server, i nostri sviluppatori possono connettersi al database remoto sulle loro macchine locali se conoscono l'host, il nome utente e la password. Con MySQL, anche se, per dare un accesso sviluppatore dalle loro macchine locali, Ho avuto per accedere a MySQL ed eseguire:Consentire tutte le connessioni remote, MySQL

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
flush privileges; 

Dove address è l'indirizzo IP della macchina dello sviluppatore. Certo, se cambiano le reti, devo eseguirlo di nuovo. C'è un modo per consentire tutte le connessioni remote come ho avuto esperienza con SQL Server, o è una cattiva idea per qualche motivo? Abbiamo ancora username e password .. Sono ovviamente un po 'confuso.

Inoltre: questo è un database di sviluppo ed è accessibile solo dalla nostra rete interna. Capisco perché sia ​​una cattiva idea dare a tutti l'accesso a un database di produzione.

+0

Hi. Ho lo stesso problema e ho suggerito tutti i comandi ma non riesco ad accedere a un accesso remoto. mi aiuti per favore. –

risposta

114

Come sottolineato da Ryan sopra, il comando che vi serve è

GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Si noti tuttavia che la documentazione indica che, al fine di far funzionare tutto questo, un altro account utente da localhost deve essere creato per lo stesso utente ; in caso contrario, l'account anonimo creato automaticamente da mysql_install_db ha la precedenza perché ha una colonna host più specifica.

In altre parole; in modo che l'utente user sia in grado di connettersi da qualsiasi server; 2 conti devono essere creati come segue:

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

leggere la documentazione completa here.

Ed ecco il pezzo rilevante di riferimento:

Dopo la connessione al server come root, è possibile aggiungere nuovi account. Le seguenti affermazioni utilizzare GRANT per impostare quattro nuovi account:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' 
    ->  WITH GRANT OPTION; 
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' 
    ->  WITH GRANT OPTION; 
mysql> CREATE USER 'admin'@'localhost'; 
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; 
mysql> CREATE USER 'dummy'@'localhost'; 

Gli account creati da queste dichiarazioni hanno le seguenti proprietà:

Due dei conti hanno un nome utente di monty e una password di some_pass. Entrambi gli account sono account di superutente con i privilegi completi per fare qualsiasi cosa. L'account 'monty' @ 'localhost' può essere utilizzato solo quando si connette dall'host locale. L'account 'monty' @ '%' utilizza il carattere jolly '%' per la parte host, quindi può essere utilizzato per connettersi da qualsiasi host .

È necessario disporre di entrambi gli account per monty per poter collegare da qualsiasi luogo come monty.Senza l'account localhost, l'account utente anonimo per localhost creato da mysql_install_db avrà la precedenza quando si connette monty dall'host locale . Di conseguenza, monty sarebbe trattato come utente anonimo. Il motivo è che l'account utente anonimo ha un valore di colonna Host più diverso dall'account 'monty' @ '%' e quindi arriva prima nell'ordinamento della tabella utente. (Tavolo di cernita utente è discusso nella Sezione 6.2.4, “Access Control, Stage 1: Connection Verification”.)

Questo sembra sciocco a me, se sto malinteso questo.

+0

Ha funzionato perfettamente. Grazie! –

10
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Permette ad un utente specifico di accedere da qualsiasi luogo.

È un problema perché rimuove alcuni controlli di sicurezza, ad esempio se un account è compromesso.

+2

vorrei poter accettare anche il tuo. Grazie! –

+2

Un'altra cosa che dovevo fare era cambiare l'interfaccia di bind TCP. Poiché dovevo connettermi a un'istanza mysql ospitata in cloud, ho cambiato "bind-address = 0.0.0.0" in /etc/mysql/my.cnf, il valore predefinito è 127.0.0.1 dove mysql ascolta solo sull'interfaccia loopback locale e non accetta chiamate da reti esterne. –

+0

Ho faticato a capire come connettermi da qualsiasi cosa e queste soluzioni mi hanno aiutato a risolvere quel problema iniziale. Molte grazie, ma ho incontrato un altro problema. Ho provato a cambiare il numero di porta da 80 a 8080. Ora, quando utilizzo http: // nomeserver: 8080/mysite, ritorna rapidamente a http: // nomeserver/mysite restituisce un 404 - file o directory non trovata errore. Come faccio a farlo funzionare con la porta 8080? Grandi cose – Kenny

18

È possibile disattivare tutta la sicurezza modificando /etc/my.cnf:

[mysqld] 
skip-grant-tables 
+0

buono! Grazie! :) – Adrian

+0

mi piace questo! – adbarads

2

Inoltre è necessario disattivare sotto la linea nel file di configurazione: bind-address = 127.0.0.1

1
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%' 
3

Installa e configura mysql per connettersi da remoto ovunque

NON FUNZIONA con mysql_secure_installation! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html)

Su Ubuntu, installare MySQL utilizzando:

sudo apt-get install mysql-server 

avere solo la sotto in /etc/mysql/my.cnf

[mysqld] 
#### Unix socket settings (making localhost work) 
user   = mysql 
pid-file  = /var/run/mysqld/mysqld.pid 
socket   = /var/run/mysqld/mysqld.sock 

#### TCP Socket settings (making all remote logins work) 
port   = 3306 
bind-address = 0.0.0.0 

Entrata in DB dal server utilizzando

mysql -u root -p

Creare utente DB utilizzando la seguente istruzione

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’; 

Aperto firewall:

sudo ufw allow 3306 

Restart mysql

sudo service mysql restart 
+0

semmai, 'concedere tutti i privilegi su *. * A 'username' @ '%' identificato da 'password';' ...ma comunque non funziona –

+0

sudo ufw allow 3306 Questo ha fatto la magia per me :) –

+0

La risposta più completa, grazie! –

Problemi correlati