Come concedere l'accesso remoto a MySQL per un'intera sottorete?


93

Posso facilmente concedere l'accesso a un IP utilizzando questo codice:

$ mysql -u root -p
Enter password:    
mysql> use mysql    
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';     
mysql> FLUSH PRIVILEGES;

Ma devo consentire all'intera sottorete 192.168.1. * Di accedere al database da remoto.

Come posso fare ciò?

Risposte:


100

EDIT: Considera l'idea di guardare e votare la risposta di Malvineous su questa pagina. Le maschere di rete sono una soluzione molto più elegante.


Usa semplicemente un segno di percentuale come carattere jolly nell'indirizzo IP.

Da http://dev.mysql.com/doc/refman/5.1/en/grant.html

È possibile specificare caratteri jolly nel nome host. Ad esempio, si user_name@'%.example.com'applica a user_nameper qualsiasi host nel example.comdominio e si user_name@'192.168.1.%'applica a user_nameper qualsiasi host nella 192.168.1sottorete di classe C.


6
L'ho appena fatto in questo modo, ma, diciamo, cosa lo rende non applicabile a: nome_utente@'192.168.1.my-hacked-rnds.killing.mysql.com '???? ora continuerò a camminare, poiché si tratta di MySQL, sento di non voler conoscere la risposta.
Florian Heigl

+ Florian, immagino che batta semplicemente usando '%' in quanto aggiunge uno strato di sicurezza che deve essere superato, ma penso che tu faccia un buon punto sulla sua debolezza. Completo certamente questa configurazione con altri mezzi, come il blocco del server del database in una sottorete separata a cui posso controllare l'accesso tramite un firewall per negare le vostre preoccupazioni, tra le altre cose.
Josiah

22
Esempi come '192.168.1.my-hacked-rnds.killing.mysql.com' 'sono specificatamente affrontati in dev.mysql.com/doc/refman/5.5/en/account-names.html : Per sventare tali tentativi, MySQL non consente la corrispondenza sui nomi host che iniziano con cifre e un punto. ... Un valore jolly IP può corrispondere solo agli indirizzi IP, non ai nomi host.
Stefan Lasiewski,

118

Esso si presenta come è anche possibile utilizzare una maschera di rete , ad esempio,

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...

7
Questa dovrebbe essere la risposta accettata in quanto è l'unica tecnica corretta. Supportato almeno dalla 5.5: dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter

6
Non provare a utilizzare la notazione CIDR come "172.16.0.0/16", questo non funziona. Utilizzare sempre la maschera di rete completa.
Oliver R.

Sembra che tu debba usare il primo indirizzo IP dell'intervallo; Usare ad esempio 192.168.0.34/255.255.255.0 fallirà!
Sander

@SanderBackus: 192.160.0.34/255.255.255.0è lo stesso 192.168.0.34/24che non ha davvero senso ( /24significa che l'ultimo numero può essere compreso tra 0 e 255, ignorando il tuo valore di 34). Funziona se usi una maschera valida per l'IP, come 192.168.0.34/255.255.255.252?
Malvineous

@ Malvineous Questo era il mio punto. Se utilizzi 192.160.0.34/255.255.255.0 mysql non consente 192.160.0.34. Intendevo consentire full / 24 (sì, ho usato la netmask completa, come documentato), ma a quanto pare Se devi usare 192.160.0.0/255.255.255.0 per consentire la gamma completa.
Sander

28

Dovresti semplicemente usare '%' come carattere jolly in questo modo:

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';

12
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

Il carattere jolly è un "%" invece di un "*"


5

Solo una nota di una particolarità che ho affrontato:
considera:

db server:  192.168.0.101
web server: 192.168.0.102

Se hai un utente definito in mysql.user come 'user'@'192.168.0.102'con password1 e un altro 'user'@'192.168.0.%'con password2,

poi,

se provi a connetterti al server db dal server web come 'utente' con password2,

risulterà in un errore "Accesso negato" perché l' 'user'@'192.168.0.102'autenticazione IP singolo viene utilizzata 'user'@'192.168.0.%'sull'autenticazione jolly .


2
Non sono sicuro che questa sia una risposta alla domanda. Se non fornisce una risposta diretta alla domanda originale, dovrebbe essere pubblicata come commento.
Kmeixner

13
Kmeixner, ti aspetti che scriva così tanto in un commento? Applica un po 'di buon senso e smetti di essere un robot. Questa comunità ha lo scopo di aiutare gli sviluppatori a non rendere la loro vita difficile.
user1735921

0

dopo aver connesso il server e desideri connetterti al tuo host, dovresti eseguire i passaggi seguenti:

  1. scrivi mysql per aprire mysql
  2. scrivere ;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. premere control e X per uscire da mysql
  4. Scrivi nano /etc/mysql/my.cnf
  5. scrivi # prima di bind-address = 127.0.0.1 nella cartella my.cnf
  6. # bind-address = 127.0.0.1
  7. salva la cartella my.cnf con control + X
  8. Scrivi service mysql restart
  9. potresti connetterti tramite navicat sul tuo host

0

Motivato dalla risposta di @Malvineaus, l'ho provato da solo e ho notato che non funzionava per me.

Puoi specificare le subnet mask con "192.168.1.%" O "192.168.1.0/255.255.255.0" ma la sottorete deve essere sempre su ottetti completi. vedere https://mariadb.com/kb/en/create-user/#host-name-component . Di conseguenza, la funzionalità tra un modo di specifica e l'altro è la stessa.

Ad esempio "192.168.1.0/255.255.255.128" non funzionerà in quanto non si trova su un confine di ottetti completo.

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.