351 Stimmen

Fernzugriff auf die MySQL-Datenbank von einer beliebigen IP-Adresse aus gewähren

Ich bin mir dieses Befehls bewusst:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Aber dann kann ich nur einer bestimmten IP-Adresse den Zugriff auf diese entfernte MySQL-Datenbank erlauben. Was ist, wenn ich möchte, dass jeder Remote-Host auf diese MySQL-Datenbank zugreifen kann? Wie kann ich das tun? Im Grunde mache ich diese Datenbank öffentlich, so dass jeder darauf zugreifen kann.

339voto

Ariel Punkte 24742
TO 'user'@'%'

% ist ein Platzhalter - Sie können auch '%.domain.example' ou '%.123.123.123' und solche Dinge, wenn Sie sie brauchen.

205voto

Siddharth Kumar Punkte 2554

Fernzugriff aktivieren (gewähren) Startseite / Tutorials / Mysql / Fernzugriff aktivieren (Grant) Wenn Sie versuchen, sich von einem entfernten Rechner aus mit Ihrem Mysql-Server zu verbinden, und eine Fehlermeldung wie die folgende erhalten, ist dieser Artikel für Sie.

FEHLER 1130 (HY000): Der Host '1.2.3.4' darf keine Verbindung zu diesem MySQL-Server

mysql-Konfiguration ändern

Beginnen Sie mit der Bearbeitung der mysql-Konfigurationsdatei

vim /etc/mysql/my.cnf

Kommentieren Sie die folgenden Zeilen aus.

#bind-address           = 127.0.0.1
#skip-networking

Wenn Sie die Zeile skip-networking nicht finden, fügen Sie sie hinzu und kommentieren Sie sie aus.

Starten Sie den mysql-Server neu.

~ /etc/init.d/mysql restart

GRANT-Privileg ändern

Sie werden vielleicht überrascht sein, dass Sie auch nach der obigen Änderung keinen Fernzugriff erhalten oder zwar Zugriff erhalten, aber nicht auf alle Datenbanken zugreifen können.

Standardmäßig ist der lokale Zugriff auf den mysql-Server mit dem von Ihnen verwendeten Benutzernamen und Passwort möglich. Daher müssen Sie die Berechtigung aktualisieren. (Wenn Sie einen separaten Benutzer für diesen Zweck erstellen möchten, können Sie CREATE USER 'USERNAME'@'localhost' IDENTIFIED BY 'PASSWORD'; )

Führen Sie einen Befehl wie den folgenden aus, um von allen Rechnern aus zuzugreifen. (Ersetzen USERNAME y PASSWORD durch Ihr Empfehlungsschreiben).

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Führen Sie einen Befehl wie den folgenden aus, um den Zugriff von einer bestimmten IP zu ermöglichen. (Ersetzen USERNAME y PASSWORD durch Ihr Empfehlungsschreiben).

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Sie können 1.2.3.4 durch Ihre IP ersetzen. Sie können den obigen Befehl mehrmals ausführen, um den Zugriff von mehreren IPs aus zu gewähren.

Sie können auch eine separate USERNAME & PASSWORD für den Fernzugriff.

Sie können das Endergebnis überprüfen, indem Sie:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Schließlich müssen Sie vielleicht auch laufen:

mysql> FLUSH PRIVILEGES;

Verbindung testen

Über Terminal/Befehlszeile:

mysql -h HOST -u USERNAME -pPASSWORD

Wenn Sie eine mysql-Shell erhalten, vergessen Sie nicht, show databases auszuführen, um zu prüfen, ob Sie die richtigen Berechtigungen für die entfernten Rechner haben.

Bonus-Tipp: Zugriff widerrufen

Wenn Sie einem Benutzer versehentlich Zugang gewähren, sollten Sie die Option zum Widerruf bereithalten.

Die folgenden Schritte widerrufen alle Optionen für USERNAME auf allen Rechnern:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

Wenn Sie nach der Ausführung des Befehls REVOKE die Berechtigung USAGE sehen, ist das in Ordnung. Es ist so gut wie gar kein Privileg. Ich bin nicht sicher, ob es widerrufen werden kann.

50voto

Um von jeder IP-Adresse aus eine Verbindung zu Ihrem Benutzer herstellen zu können, gehen Sie wie folgt vor:

Erlauben Sie dem mysql-Server, Remote-Verbindungen zu akzeptieren. Öffnen Sie dazu die Datei mysqld.conf:

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

Suchen Sie nach der Zeile, die mit "bind-address" beginnt, und setzen Sie den Wert auf 0.0.0.0

bind-address                    = 0.0.0.0

und speichern Sie schließlich die Datei.

Hinweis: Wenn Sie MySQL 8+ verwenden, muss die bind-address Richtlinie wird nicht in der mysqld.cnf Datei standardmäßig. In diesem Fall fügen Sie die folgende Richtlinie am Ende der Datei hinzu /etc/mysql/mysql.conf.d/mysqld.cnf .

Starten Sie nun den mysql-Server neu, entweder mit systemd oder verwenden Sie die ältere service Befehl. Dies hängt von Ihrem Betriebssystem ab:

sudo systemctl restart mysql # for ubuntu    
sudo systemctl restart mysqld.service # for debian

Schließlich ist der mysql-Server nun in der Lage, Remote-Verbindungen zu akzeptieren.

Jetzt müssen wir einen Benutzer erstellen und ihm die Berechtigung erteilen, damit wir uns mit diesem Benutzer aus der Ferne anmelden können.

Verbinden Sie sich mit der MySQL-Datenbank als Root oder als ein anderer Benutzer mit Root-Rechten.

mysql -u root -p

Erstellen Sie nun den gewünschten Benutzer sowohl auf localhost als auch auf dem Platzhalter '%' und erteilen Sie die Berechtigungen für alle DBs als solche.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

Dann,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

Und schließlich vergessen Sie nicht, die Privilegien zu spülen

FLUSH PRIVILEGES;

Hinweis: Wenn Sie eine Firewall auf Ihrem Datenbankserver konfiguriert haben, müssen Sie auch den Port 3306 Der Standardport von MySQL, der den Datenverkehr zu MySQL zulässt.

Ich hoffe, das hilft ;)

39voto

Waqas Punkte 3513

Angenommen, der obige Schritt ist abgeschlossen und der MySql-Port 3306 ist für den Fernzugriff frei; vergessen Sie nicht, die öffentliche IP-Adresse in der mysql-Konfigurationsdatei zu binden.

Zum Beispiel auf meinem Ubuntu-Server:

#nano /etc/mysql/my.cnf

Suchen Sie in der Datei nach dem Eintrag [mysqld] Block und fügen Sie die neue Bindungsadresse hinzu, in diesem Beispiel 192.168.0.116. Das würde etwa so aussehen

......    
.....    
# 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    
bind-address        = 192.168.0.116

.....    
......

Sie können die localhost(127.0.0.1)-Bindung entfernen, aber dann müssen Sie eine IP-Adresse angeben, um auf den Server auf dem lokalen Rechner zuzugreifen.

Der letzte Schritt ist der Neustart des MySql-Servers (unter Ubuntu)

stop mysql

start mysql

oder #/etc/init.d/mysql restart für andere Systeme

Jetzt kann der Zugriff auf die MySQL-Datenbank aus der Ferne erfolgen:

mysql -u username -h 192.168.0.116 -p

32voto

harishannam Punkte 2651

Änderungen in der Konfigurationsdatei sind erforderlich, um Verbindungen über localhost zu ermöglichen.

Um eine Verbindung über Remote-IPs herzustellen, melden Sie sich als "Root"-Benutzer an und führen Sie die folgenden Abfragen in mysql aus.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

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

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Dadurch wird ein neuer Benutzer erstellt, der sowohl auf localhost als auch von entfernten IPs aus erreichbar ist.

Kommentieren Sie außerdem die folgende Zeile in der Datei my.cnf aus, die sich in /etc/mysql/my.cnf befindet

bind-address = 127.0.0.1

Starten Sie Ihr mysql neu mit

sudo service mysql restart

Jetzt sollten Sie in der Lage sein, sich aus der Ferne mit Ihrem mysql zu verbinden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X