Gewähren Sie den Remotezugriff auf die MySQL-Datenbank von einer beliebigen IP-Adresse aus


280

Mir ist dieser Befehl bekannt:

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

Dann kann ich jedoch nur eine bestimmte IP-Adresse für den Zugriff auf diese entfernte MySQL-Datenbank vergeben. Was ist, wenn ich möchte, dass jeder Remote-Host auf diese MySQL-Datenbank zugreifen kann? Wie mache ich das? Grundsätzlich mache ich diese Datenbank öffentlich, damit jeder darauf zugreifen kann.


1
Bevor Sie dies tun, sollten Sie die Sicherheitsauswirkungen berücksichtigen: security.stackexchange.com/questions/63881/…
e18r

7
Nicht jedes System ist ein Produktionssystem. Manche Menschen brauchen dies für die Entwicklung.
Conrad Jones

Antworten:


272
TO 'user'@'%'

% ist ein Platzhalter - Sie können auch '%.domain.com'oder '%.123.123.123'und solche Dinge tun , wenn Sie brauchen.


@kristopolous Es gibt viele Dinge, die das verursachen könnten. Bei diesem Befehl handelt es sich um den Fernzugriff (zwei verschiedene Computer). Wenn Sie dies nicht tun, ist dies nicht der richtige Befehl. Sie benötigen noch ein korrektes Passwort und andere Dinge.
Ariel

11
Sie müssen "Flush-Berechtigungen" verwenden. damit die Änderungen wirksam werden
Didier Sampaolo

Der Trick beim Herstellen einer Verbindung zu einer Datenbankinstanz, die auf derselben Betriebssysteminstanz (z. B. Ihrem Entwicklungscomputer) ausgeführt wird, besteht darin, den -h my_machine_nameParameter zu übergeben. Dies täuscht den Kunden vor, Sie als zu identifizieren 'user'@my_machine_name.example.com, anstatt 'user'@localhost. Auf diese Weise müssen Sie keine doppelten Konten und Zuschüsse für beide localhostund den Netzwerkzugriff erstellen und verwalten . Und natürlich, werden sicher mysqldist gebunden 0.0.0.0vs. 127.0.0.1.
Charlie Reitzel

173

Aktivieren des Remotezugriffs (Grant) Startseite / Tutorials / MySQL / Aktivieren des Remotezugriffs (Grant) Wenn Sie versuchen, von einem Remotecomputer aus eine Verbindung zu Ihrem MySQL-Server herzustellen, und der folgende Fehler auftritt, ist dieser Artikel genau das Richtige für Sie.

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

Ändern Sie die MySQL-Konfiguration

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 keine Skip-Networking-Zeile finden, fügen Sie sie hinzu und kommentieren Sie sie aus.

Starten Sie den MySQL-Server neu.

~ /etc/init.d/mysql restart

Ändern Sie das GRANT-Privileg

Es kann Sie überraschen, dass Sie auch nach der obigen Änderung keinen Remotezugriff oder Zugriff erhalten, aber nicht auf alle Datenbanken zugreifen können.

Standardmäßig dürfen der von Ihnen verwendete MySQL-Benutzername und das Passwort lokal auf den MySQL-Server zugreifen. Also muss das Privileg aktualisiert werden.

Führen Sie einen Befehl wie unten aus, um von allen Computern aus darauf zuzugreifen. (Ersetzen Sie USERNAMEund PASSWORDdurch Ihre Anmeldeinformationen.)

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

Führen Sie einen Befehl wie unten aus, um Zugriff von einer bestimmten IP zu gewähren. (Ersetzen Sie USERNAMEund PASSWORDdurch Ihre Anmeldeinformationen.)

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 viele Male ausführen, um den Zugriff von mehreren IP-Adressen zu gewähren.

Sie können auch ein separates USERNAME& PASSWORDfür den Fernzugriff angeben .

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

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

Schließlich müssen Sie möglicherweise auch Folgendes ausführen:

mysql> FLUSH PRIVILEGES;

Testverbindung

Vom Terminal / Kommandozeile:

mysql -h HOST -u USERNAME -pPASSWORD

Wenn Sie eine MySQL-Shell erhalten, vergessen Sie nicht, Show-Datenbanken auszuführen. um zu überprüfen, ob Sie über die richtigen Berechtigungen von Remotecomputern verfügen.

Bonus-Tipp: Zugriff widerrufen

Wenn Sie einem Benutzer versehentlich Zugriff gewähren, sollten Sie die Widerrufsoption zur Hand haben.

Im Folgenden werden alle Optionen für USERNAME von allen Computern widerrufen:

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 dem Ausführen des REVOKE-Befehls das USAGE-Privileg sehen, ist dies in Ordnung. Es ist so gut wie gar kein Privileg. Ich bin nicht sicher, ob es widerrufen werden kann.


7
Beachten Sie, dass ich die /etc/mysql/mysql.conf.d/mysqld.cnfDatei ändern musste, anstatt die /etc/mysql/my.cnfzu kommentierenbind-address Teil zu müssen. Die #skip-networkingZeile fehlt und das Hinzufügen und Kommentieren der Zeile sollte keine Auswirkungen haben.
Pawan

1
In MariaDB 10.1.26 lautet die Konfigurationsdatei/etc/mysql/mariadb.conf.d/50-server.cnf
Kwadz

Wenn Sie alle oben genannten Schritte ausgeführt haben und immer noch keine Verbindung herstellen können, überprüfen Sie Ihre Firewall-Einstellungen. Möglicherweise wird der Port blockiert 3306
Schritte ausgeführt

37

Angenommen, der obige Schritt ist abgeschlossen und auf den MySQL-Port 3306 kann remote zugegriffen werden. 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 Abschnittsblock [mysqld] und fügen Sie die neue Bindungsadresse hinzu. In diesem Beispiel ist dies 192.168.0.116. Es würde ungefähr 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-Bindung (127.0.0.1) entfernen, wenn Sie dies wünschen. Anschließend müssen Sie jedoch eine IP-Adresse angeben, um auf den Server auf dem lokalen Computer zugreifen zu können.

Der letzte Schritt besteht darin, den MySQL-Server neu zu starten (unter Ubuntu).

stop mysql

start mysql

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

Jetzt kann remote auf die MySQL-Datenbank zugegriffen werden durch:

mysql -u username -h 192.168.0.116 -p

/etc/init.d/mysql reloadsollte ausreichen
Lorenz Lo Sauer

Ich habe dies gerade getan und konnte keine Remote-Verbindung zum MySQL-Server herstellen. Ich habe dann versucht, die Bindeadressen zu kommentieren und es hat funktioniert. Ich habe auch versucht, mich mit mysql -u <user> -p am Server anzumelden, ohne den Host anzugeben, und es hat funktioniert. Es scheint also, dass "Sie die localhost-Bindung (127.0.0.1) entfernen können, wenn Sie möchten, aber dann müssen Sie dies speziell tun Geben Sie eine IP-Adresse an, um auf den Server auf dem lokalen Computer zuzugreifen. " das ist nicht richtig. (Ubuntu 12.04 LTS Server MySQL Ver 14.14 Distrib 5.5.34)
Programster

5
Die bind-addressDirektive bestimmt die IP-Adresse, die der MySQL- Server abhört. nicht die IP-Adressen, von denen der Server Verbindungen akzeptiert.
GoZoner

1
Nach jedem Schritt funktioniert es nicht. Ich erhalte eine Fehlermeldung, wenn ich bind-addressentweder die localhost- oder die remotehost-Adresse auskommentiere. mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
Baermathias

Ist es möglich, eine Adresse wie abc.abc:1234 anstelle von 192.168.0.116 anzugeben?
Bielas

26

Für alle, die damit herumgefummelt haben, hier ist, wie ich die Privilegien gewähren konnte, hoffe, es hilft jemandem

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Wie bereits erwähnt, %handelt es sich um einen Platzhalter, mit dem jede IP-Adresse eine Verbindung zu Ihrer Datenbank herstellen kann. Die Annahme, die ich hier mache, ist, wenn Sie eine Verbindung herstellen, haben Sie einen Benutzer namens root(was jedoch die Standardeinstellung ist). Geben Sie das Root-Passwort ein und Sie können loslegen. Beachten Sie, dass ich keine einfachen Anführungszeichen ( ') um das Benutzerstammverzeichnis habe.


Warum ist es wichtig, die einfachen Anführungszeichen vom Benutzer zu entfernen? Warum unterscheidet sich dies von anderen Antworten (und dem Handbuch)?
DMCoding

26

Änderungen an der Konfigurationsdatei sind erforderlich, um Verbindungen über localhost zu aktivieren.

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, auf den sowohl über localhost als auch über Remote-IPs zugegriffen werden kann.

Kommentieren Sie auch die folgende Zeile aus Ihrer my.cnf-Datei in /etc/mysql/my.cnf

bind-address = 127.0.0.1

Starten Sie Ihre MySQL mit neu

sudo service mysql restart

Jetzt sollten Sie in der Lage sein, eine Remote-Verbindung zu Ihrem MySQL herzustellen.


2
Dies beantwortet die Frage nicht.
CHarris

1
@ChristopheHarris warum fühlst du dich so? Die Antwort enthält eine klare schrittweise Anleitung zum Erstellen eines neuen Benutzers in MySQL, der sowohl den lokalen Host als auch den Remotezugriff auf die Datenbank mit diesem Benutzer ermöglicht. Können Sie bitte erklären?
Harishannam

1
Funktioniert bei mir nicht Habe immer noch den gleichen Fehler. Egal, ob ich es mit root oder einem neuen Benutzer versuche: Es kann keine Verbindung zum MySQL-Server unter 'xxx.xxx.xxx.xxx' hergestellt werden ([Errno 61] Verbindung abgelehnt)
baermathias

21

Verwenden Sie diesen Befehl:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Dann:

FLUSH PRIVILEGES; 

Dann kommentieren Sie die folgende Zeile in der Datei "/etc/mysql/mysql.conf.d/mysqld.cnf" (erforderlich!):

bind-address = 127.0.0.1 

Funktioniert bei mir!


Sehr gut. Wichtig ist der Zuschuss. Wenn nicht, viele Fehler für Anfragen wieyour-password-does-not-satisfy-the-current-policy-requirements
Alejandro Teixeira Muñoz

21

Gehen Sie wie folgt vor, um von einer beliebigen IP-Adresse aus eine Verbindung mit Ihrem Benutzer herstellen zu können:

Erlauben Sie dem MySQL-Server, Remoteverbindungen 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 "Bindungsadresse" 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+ ausführen, befindet sich die bind-addressDirektive mysqld.cnfstandardmäßig nicht in der Datei. Fügen Sie in diesem Fall die Direktive am Ende der Datei hinzu /etc/mysql/mysql.conf.d/mysqld.cnf.

Starten Sie nun den MySQL-Server entweder mit systemdoder mit dem älteren serviceBefehl neu. Dies hängt von Ihrem Betriebssystem ab:

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

Schließlich kann der MySQL-Server jetzt Remoteverbindungen akzeptieren.

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

Stellen Sie eine Verbindung zur MySQL-Datenbank als Root oder zu einem anderen Benutzer mit Root-Rechten her.

mysql -u root -p

Erstellen Sie nun den gewünschten Benutzer sowohl im lokalen Platzhalter als auch im Platzhalter '%' und erteilen Sie 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 vergessen Sie nicht, die Berechtigungen zu löschen

FLUSH PRIVILEGES;

Hinweis: Wenn Sie auf Ihrem Datenbankserver eine Firewall konfiguriert haben, müssen Sie auch den Port öffnen 3306 den Standardport von Port MySQL , um Datenverkehr zu MySQL zuzulassen.

Hoffe das hilft ;)


2
sudo systemctl restart mysqld.service ist für debian, ich musste sudo systemctl restart verwenden mysql.service ist für ubuntu
ani0904071

Ich habe meine Antwort aktualisiert und den Befehl mysql restart für beide Distributionen hinzugefügt. danke @ ani0904071
Imtiaz Shakil Siddique

17

Führen Sie Folgendes aus:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Versuchen Sie dann eine Verbindung von der von Ihnen angegebenen IP-Adresse:

mysql -h address-of-remove-server -u root -p   

Sie sollten in der Lage sein, eine Verbindung herzustellen.


15

Mit diesem Befehl können Sie das Problem von MariaDB lösen :

Hinweis:

GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';

%ist ein Platzhalter. In diesem Fall bezieht es sich auf alle IP-Adressen.


3
In MySQL müssen Sie (1) den Inhalt von my.cnf ändern (2) .grant remote user (3) sich mit Ihrer Firewall befassen, um den 3306-Port abzuhören.
陆家嘴 顶尖 的 投资

Du hast meinen Tag gerettet. Bin dankbar!
Almett


7

So greifen Sie remote auf den Datenbank-MySQL-Server 8 zu:

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

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

FLUSH PRIVILEGES;

5
  • STARTEN SIE MYSQL mit dem Administrator
    • mysql -u admin-user -p (PASSWORT AUF PROMPT EINGEBEN)
  • Erstellen Sie einen neuen Benutzer:
    • CREATE USER 'newuser' @ '%' IDENTIFIED BY 'password'; (% -> anyhost)
  • Berechtigungen gewähren:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON Datenbankname. * TO 'newuser' @ '%';
    • SPÜLPRIVILEGIEN;

Wenn Sie eine EC2-Instanz ausführen, vergessen Sie nicht, die eingehenden Regeln in der Sicherheitsgruppe mit MYSQL / Aurura hinzuzufügen.


5

Datei bearbeiten:

/etc/mysql/percona-server.cnf

Fügen Sie den folgenden Code in die Datei ein.

[mysqld] bind-address = 0.0.0.0

Erstellen Sie einen Benutzer für den Remotezugriff.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

Alle Linux Server funktioniert,

Für MSWin c: \ Installationsort suchen \ Dateipfad


[mysqld] muss in Datei hinzugefügt werden, sonst funktioniert nicht richtig
Tejas Tank

3

Erstellen Sie einfach den Benutzer zu einer Datenbank wie

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

Dann geh zu

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf und ändern Sie die Zeile bind-address = 127.0.0.1 inbind-address = 0.0.0.0

Danach können Sie von jeder IP-Adresse aus eine Verbindung zu dieser Datenbank herstellen.


3

Öffnen Sie Ihre mysql consoleund führen Sie den folgenden Befehl aus (geben Sie Ihren Datenbanknamen, Benutzernamen und Ihr Passwort ein):

GRANT ALL ON yourdatabasename. * TO admin @ '%' IDENTIFIED BY 'yourRootPassword';

Dann ausführen:

SPÜLPRIVILEGIEN;

Öffnen Sie die Befehlszeile und öffnen Sie die Datei /etc/mysql/mysql.conf.d/mysqld.cnfmit einem beliebigen Editor mit root privileges.

Beispielsweise:

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

Dann kommentieren Sie die folgende Zeile aus:

Bindungsadresse = 127.0.0.1

Starten Sie mysql neu, um die Änderungen mit dem folgenden Befehl widerzuspiegeln:

sudo service mysql restart

Genießen ;)


2

Sie müssen die MySQL-Konfigurationsdatei ändern:

Beginnen Sie mit der Bearbeitung der MySQL-Konfigurationsdatei

vim /etc/mysql/my.cnf

hinzufügen:

bind-address = 0.0.0.0

0

In Website-Panels wie cPanel können Sie den %zulässigen Hostnamen ein einzelnes (Prozentzeichen) hinzufügen, um auf Ihre MySQL-Datenbank zuzugreifen.

Durch Hinzufügen einer einzelnen %können Sie von jeder IP-Adresse oder Website aus auf Ihre Datenbank zugreifen, auch von Desktop-Anwendungen aus.


Bitte beziehen Sie sich nicht auf etwas wie cPanel, wenn eine direkte Abfrage
angezeigt

@TobiasHagenbeek Vielen Dank für Ihr Feedback. Diese Methode / dieser Trick wurde von mir nicht erfunden (im Internet üblich). Aber ich bin einer der Tester dieser Methode und fand, dass es die einfachste und funktionierendste Methode ist. Deshalb habe ich sie hier veröffentlicht. Ich weiß, dass diese Methode einige Sicherheitsrisiken birgt, die vernachlässigt werden können.
Muhammad Saqib

0

Zum Beispiel in meinem CentOS

sudo gedit /etc/mysql/my.cnf

Kommentieren Sie die folgenden Zeilen aus

# bind-address = 127.0.0.1

dann

sudo service mysqld neu starten


0

Wenn Sie den Remotezugriff auf Ihre Datenbank von einer beliebigen IP-Adresse aus gewähren möchten, führen Sie den Befehl mysql und anschließend den folgenden Befehl aus.

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

0

Was unter Ubuntu funktioniert hat, ist, dem Benutzer alle Berechtigungen zu gewähren:

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

und Setzen der Bindungsadresse in /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

Starten Sie dann den MySQL-Daemon neu:

service mysql restart

-7

Sie können die gesamte Sicherheit deaktivieren, indem Sie /etc/my.cnf bearbeiten:

skip-grant-tables

Dies entfernt alle Passwortanforderungen
kristopolous

5
Beachten Sie, dass es nicht ratsam ist, diese Option in einer Produktionsumgebung zu aktivieren, da dies jedem ermöglicht, eine Verbindung ohne Kennwort herzustellen!
AStopher

Dies ist jedoch ideal für eine
Entwicklungsumgebung

Auf diese Weise können Benutzer Ihre Datenbank ohne Verwendung eines Kennworts hacken.
MilkyWay90

@ DanielJames sogar für Entwicklungsumgebung ist es eine schreckliche Idee
Dragas
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.