Wie kann ich einem ganzen Subnetz Remotezugriff auf MySQL gewähren?


91

Mit diesem Code kann ich problemlos Zugriff auf eine IP gewähren:

$ 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;

Aber ich muss dem gesamten Subnetz 192.168.1. * Erlauben, remote auf die Datenbank zuzugreifen.

Wie kann ich das machen?

Antworten:


99

BEARBEITEN: Betrachten Sie die Antwort von Malvineous auf dieser Seite und stimmen Sie sie ab . Netmasken sind eine viel elegantere Lösung.


Verwenden Sie einfach ein Prozentzeichen als Platzhalter in der IP-Adresse.

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

Sie können Platzhalter im Hostnamen angeben. Zum Beispiel user_name@'%.example.com'gilt user_namefür jeden Host in der example.comDomäne, und user_name@'192.168.1.%'gilt user_namefür jeden Host in der 192.168.1Klasse C Subnetz.


6
Ich habe es einfach so gemacht, aber sagen wir, warum gilt es nicht für: user_name@'192.168.1.my-hacked-rnds.killing.mysql.com '???? Ich werde jetzt weitermachen, da dies MySQL ist, habe ich das Gefühl, dass ich die Antwort nicht wissen möchte.
Florian Heigl

+ Florian, ich denke, es ist besser, einfach '%' zu verwenden, da es eine Sicherheitsebene hinzufügt, die überwunden werden muss, aber ich denke, Sie machen einen guten Punkt über seine Schwäche. Ich ergänze diese Konfiguration auf jeden Fall durch andere Mittel, z. B. durch Sperren des Datenbankservers in einem separaten Subnetz, auf das ich über eine Firewall zugreifen kann, um unter anderem Ihre Bedenken auszuräumen.
Josiah

22
Beispiele wie '192.168.1.my-hacked-rnds.killing.mysql.com' 'werden speziell in dev.mysql.com/doc/refman/5.5/en/account-names.html behandelt : Um solche Versuche zu vereiteln, MySQL Verbietet keine Übereinstimmung mit Hostnamen, die mit Ziffern und einem Punkt beginnen. ... Ein IP-Platzhalterwert kann nur mit IP-Adressen übereinstimmen, nicht mit Hostnamen.
Stefan Lasiewski

112

Es sieht so aus, als könnten Sie auch eine Netzmaske verwenden , z

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

6
Dies sollte die akzeptierte Antwort sein, da dies die einzig technisch korrekte ist. Unterstützt seit mindestens 5.5: dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter

6
Versuchen Sie nicht, die CIDR-Notation wie "172.16.0.0/16" zu verwenden. Dies funktioniert nicht. Verwenden Sie immer die vollständige Netzmaske.
Oliver R.

Anscheinend müssen Sie die erste IP-Adresse im Bereich verwenden. Die Verwendung von beispielsweise 192.168.0.34/255.255.255.0 schlägt fehl!
Sander

@SanderBackus: 192.160.0.34/255.255.255.0ist das gleiche, 192.168.0.34/24was nicht wirklich Sinn macht ( /24bedeutet, dass die letzte Zahl zwischen 0 und 255 liegen kann, wobei Ihr Wert von 34 ignoriert wird). Funktioniert es, wenn Sie eine gültige Maske für die IP verwenden, wie 192.168.0.34/255.255.255.252?
Malvineous

@ Malvineous Das war mein Punkt. Wenn Sie 192.160.0.34/255.255.255.0 verwenden, lässt mysql 192.160.0.34 nicht zu. Ich wollte full / 24 zulassen (ja, ich habe die vollständige Netzmaske verwendet, wie dokumentiert), aber anscheinend, wenn Sie 192.160.0.0/255.255.255.0 verwenden müssen, um den vollen Bereich zuzulassen.
Sander

28

Sie würden einfach '%' wie folgt als Platzhalter verwenden:

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';  

Das Platzhalterzeichen ist ein "%" anstelle eines "*"


5

Nur eine Anmerkung zu einer Besonderheit, mit der ich konfrontiert war:
Betrachten Sie:

db server:  192.168.0.101
web server: 192.168.0.102

Wenn Sie in mysql.user einen Benutzer wie 'user'@'192.168.0.102'mit password1 und einen anderen 'user'@'192.168.0.%'mit password2 definiert haben,

dann,

Wenn Sie versuchen, vom Webserver aus als 'Benutzer' mit Kennwort2 eine Verbindung zum DB-Server herzustellen,

Dies führt zu einem Fehler "Zugriff verweigert", da die Einzel-IP- 'user'@'192.168.0.102'Authentifizierung über die Platzhalterauthentifizierung verwendet wird 'user'@'192.168.0.%'.


2
Ich bin nicht sicher, ob dies eine Antwort auf die Frage ist. Wenn es keine direkte Antwort auf die ursprüngliche Frage gibt, sollte es als Kommentar gepostet werden.
Kmeixner

13
Kmeixner, erwarten Sie, dass er so viel in einen Kommentar schreibt? Wenden Sie einen gesunden Menschenverstand an und hören Sie auf, ein Roboter zu sein. Diese Community soll den Entwicklern helfen, ihr Leben nicht zu erschweren.
user1735921

0

Nachdem Sie eine Verbindung zum Server hergestellt haben und eine Verbindung zu Ihrem Host herstellen möchten, sollten Sie die folgenden Schritte ausführen:

  1. schreibe mysql , um mysql zu öffnen
  2. schreiben ;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. Drücken Sie die Strg-Taste und X, um MySQL zu beenden
  4. schreiben nano /etc/mysql/my.cnf
  5. Schreiben Sie # vor bind-address = 127.0.0.1 in den Ordner my.cnf
  6. # bind-address = 127.0.0.1
  7. Speichern Sie den Ordner my.cnf mit Strg + X.
  8. schreiben service mysql restart
  9. Sie können eine Verbindung über navicat auf Ihrem Host herstellen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.