MySQL fügt Benutzer für Fernzugriff hinzu


147

Ich habe einen Benutzer user@'%'mit erstellt password 'password. Aber ich kann mich nicht verbinden mit:

mysql_connect('localhost:3306', 'user', 'password');

Als ich einen Benutzer erstellt habe user@'localhost', konnte ich eine Verbindung herstellen. Warum? Bedeutet '%' nicht von JEDEM Host?


Beachten Sie, dass das Kennwort für Benutzer @ localhost und Benutzer @% sowie die Berechtigungen im Allgemeinen unterschiedlich sind.
Jose Manuel Gomez Alvarez

Antworten:


377

Um eine Remoteverbindung herzustellen, muss MySQL den Port 3306 an die IP-Adresse Ihres Computers in my.cnf binden. Dann müssen Sie den Benutzer sowohl im lokalen Platzhalter als auch im Platzhalter '%' erstellt haben und Berechtigungen für alle DBs als solche erteilen . Siehe unten:

my.cnf (my.ini unter Windows)

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

dann

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'@'%';
flush privileges;

Abhängig von Ihrem Betriebssystem müssen Sie möglicherweise Port 3306 öffnen, um Remoteverbindungen zuzulassen.


1
Dies half mir bei der Verwendung einer privaten WebFaction-MySQL-Instanz. Ich habe die Schritte CREATE USER und GRANT ALL mysql.default_port = <private instance port>befolgt, in meiner php.ini festgelegt und dann 127.0.0.1durchgehend für meinen Datenbank-Hostnamen verwendet
spex

Sehr hilfreich. Nur ein Kommentar. my.cnf könnte eine andere Konfigurationsdatei enthalten, sodass sich die entsprechende Zeile möglicherweise an einer anderen Stelle befindet. Suchen Sie in my.cnf nach einer Zeile, die mit! Include beginnt. Wenn sich die Bindeadresse nicht in my.cnf befindet, befindet sie sich möglicherweise in der enthaltenen Datei.
Tru7

Wo ist die my.cnf-Datei?
Vladimir Despotovic

7
Vergiss nicht, PRIVILEGIEN ZU SPÜLEN;)
volkovmqx

4
Warum sowohl localhost als auch%?
Nächte

21

Befolgen Sie die Anweisungen (Schritte 1 bis 3 werden in Windows nicht benötigt):

  1. Finden Sie die zu bearbeitende MySQL-Konfiguration:

    /etc/mysql/my.cnf (Mysql 5.5)

    /etc/mysql/conf.d/mysql.cnf (Mysql 5.6+)

  2. Finden Sie bind-address=127.0.0.1in der Konfigurationsdatei ändern bind-address=0.0.0.0(Sie bind - Adresse an einem Ihrem Schnittstelle ips einstellen können oder wie ich verwende 0.0.0.0)

  3. Starten Sie den auf der Konsole ausgeführten MySQL-Dienst neu: service restart mysql

  4. Erstellen Sie einen Benutzer mit einem sicheren Kennwort für die Remoteverbindung. Führen Sie dazu den folgenden Befehl in MySQL aus (wenn Sie Linux-Benutzer sind, um die MySQL-Konsolenausführung zu erreichen, mysqlund wenn Sie das Kennwort für den Root-Lauf festlegen mysql -p):

    GRANT ALL PRIVILEGES 
     ON *.* TO 'remote'@'%' 
     IDENTIFIED BY 'safe_password' 
     WITH GRANT OPTION;`

Jetzt sollten Sie einen Benutzer mit dem Namen userund dem Kennwort von safe_passwordhaben, der eine Remoteverbindung herstellen kann.


2
Bindeadresse ändern = 0.0.0.0 ... das hat bei mir funktioniert. und gewähren Privilegien
zwitterion

12

Für welche Datenbank ist der Benutzer? Schauen Sie sich dieses Beispiel an

mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Um auf Ihre Frage zurückzukommen, bedeutet der Operator "%" alle Computer in Ihrem Netzwerk.

Wie Aspesa zeigt, bin ich mir auch sicher, dass Sie einen Benutzer erstellen oder aktualisieren müssen. Suchen Sie nach all Ihren MySQL-Benutzern:

SELECT user,password,host FROM user;

Sobald Sie Ihren Benutzer eingerichtet haben, sollten Sie in der Lage sein, eine Verbindung wie folgt herzustellen:

mysql -h localhost -u gmeier -p

ich hoffe es hilft


im Allgemeinen für alle db. Ich möchte nur eine Verbindung herstellen, nicht DB auswählen. codemysql_connect ('localhost: 3306', 'user', 'password'); code
user2333586

Auf welchem ​​Betriebssystem bist du, Windows, Linux?
Apesa

Fenster. Wamp Server.
user2333586

Sie müssen sicherstellen, dass Ihre IP-Adresse an Port 3306 gebunden ist. In Windows können Sie netstat -n verwenden, um zu sehen, welche Ports an Ihre IP gebunden sind. Wenn Sie 127.0.0.1:3306 sehen, können Sie keine Verbindung von etwas anderem als localhost
apesa
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.