it-swarm.com.de

MySQL - Zugriff für Benutzer 'root'@'x.x.x.x' verweigert

Ich versuche, von meiner lokalen Box aus eine Verbindung zu einer entfernten MySQL-Datenbank herzustellen. Anfangs konnte ich nicht einmal die MySQL-Datenbank treffen. Aber nachdem ich die Bindungsadresse in der Datei my.cnf kommentiert und den MySQL-Server neu gestartet habe, kann ich sie jetzt treffen.

Aber jetzt erhalte ich den Fehler "Zugriff verweigert"

mysql -u root -h x.x.x.x -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'x.x.x.x' (using password: YES)

Wird meine IP auf die schwarze Liste gesetzt oder so? Ich kann das ändern, da ich Administratorrechte auf der Remote-Box habe. Hilft mir jemand.

13
bragboy

Stellen Sie sicher, dass root Zugriff von anderen Hosts/IPs als localhost hat.

mysql> benutze mysql;
mysql> SELECT Host FROM user WHERE user = 'root';

Wenn nur eine Zeile mit "localhost" zurückgegeben wird, müssen Sie der IP-Adresse, von der aus Sie eine Verbindung herstellen, Berechtigungen erteilen.

mysql> GRANT SELECT, INSERT ON mydatabase. * TO 'root'@'10.0.0.1';

Ersetzen Sie mydatabase durch die Datenbank, auf die Sie zugreifen möchten (oder geben Sie einen Platzhalter ein), und ersetzen Sie dann die IP durch die Adresse oder das Subnetz, von dem aus Ihr Client eine Verbindung herstellt.

8
Serge Stepanov

Die erste Aufgabe besteht darin, mit vollen Berechtigungen einzusteigen. Wenn Sie dies nicht können, fügen Sie diese Zeile zu my.cnf hinzu und starten Sie mysql neu:

skip-grant-tables

Ich empfehle eine kleine Aufklärung, um zu sehen, welche Benutzer Sie haben:

SELECT user,Host,password FROM mysql.user WHERE user = 'root' ORDER BY Host ASC;

Daraufhin wird Ihre Benutzerliste angezeigt, z. B.:

mysql> SELECT user,Host,password FROM mysql.user WHERE user = 'root' ORDER BY Host ASC;
+------+------------+-------------------------------------------+
| user | Host       | password                                  |
+------+------------+-------------------------------------------+
| root | 127.0.0.1  |                                           |
| root | ::1        |                                           |
| root | localhost  | *E0AD777475E6713F9B04317EE38888D61042DAC1 |
| root | randym-mbp |                                           |
+------+------------+-------------------------------------------+
4 rows in set (0.01 sec)

Sie müssen localhost in der Liste sehen. Wenn Sie dies nicht tun, fügen Sie es folgendermaßen hinzu:

GRANT ALL PRIVILEGES ON *.* TO [email protected]'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

Ansonsten aktualisieren Sie einfach das Passwort wie folgt:

SET PASSWORD FOR [email protected]'localhost' = PASSWORD('your_password');
FLUSH PRIVILEGES;

Entfernen Sie dann die Skip-Grant-Tabellen aus Ihrer my.cnf und starten Sie mysql neu.

22
randomx

Passwörter in mysql werden pro IP eingerichtet. Normalerweise sind sie nur für den Zugriff über localhost festgelegt, insbesondere für den Root-Benutzer. Stellen Sie sicher, dass ein [email protected]% Eintragseinstellung in Ihrer Berechtigungstabelle.

Wenn Sie wirklich Remote-Root-Zugriff zulassen müssen, sollten Sie bitte den Benutzernamen ändern, damit die Benutzer das Superuser-Konto Ihres Servers nicht leicht erraten können.

4

Für Unix-ähnliche Systeme hat die folgende Lösung für mich funktioniert, um das Root-Passwort zurückzusetzen: http://www.cyberciti.biz/tips/recover-mysql-root-password.html

Jist:

Stellen Sie das Kennwort des MySQL-Datenbankservers mit den folgenden fünf einfachen Schritten wieder her:

  1. Stoppen Sie den MySQL-Serverprozess.

  2. Starten Sie den MySQL (mysqld) Server/Daemon-Prozess mit der Option --skip-grant-tables, damit kein Kennwort abgefragt wird.

  3. Stellen Sie als Root-Benutzer eine Verbindung zum MySQL-Server her.

  4. Richten Sie ein neues MySQL-Root-Konto-Passwort ein, d. H. Setzen Sie das MySQL-Passwort zurück.

  5. Beenden Sie den MySQL-Server und starten Sie ihn neu.

Spezifische Befehle: (Login als Root-Benutzer):

  1. Stoppen Sie den MySQL-Dienst

    # /etc/init.d/mysql stop
    

    Ausgabe:

    Stopping MySQL database server: mysqld.
    
  2. Starten Sie den MySQL-Server ohne Passwort:

    benutze mysqld_safe:

    mysqld_safe --skip-grant-tables &
    

    Ausgabe:

    [1] 5988
    Starting mysqld daemon with databases from /var/lib/mysql
    mysqld_safe[6025]: started
    
  3. Stellen Sie mit dem MySQL-Client eine Verbindung zum MySQL-Server her:

    # mysql -u root
    

    Ausgabe:

    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql>
    
  4. Richten Sie ein neues MySQL-Root-Benutzerpasswort ein

    mysql> use mysql;
    mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
    mysql> flush privileges;
    mysql> quit
    
  5. Stoppen Sie MySQL Server:

    # /etc/init.d/mysql stop
    

    Ausgabe:

    Stopping MySQL database server: mysqld
    STOPPING server from pid file /var/run/mysqld/mysqld.pid
    mysqld_safe[6186]: ended
    [1]+  Done                    mysqld_safe --skip-grant-tables
    
  6. Starten Sie den MySQL-Server und testen Sie ihn:

    # /etc/init.d/mysql start
    # mysql -u root -p
    
1
c33s

Es ist möglich, dass Sie Berechtigungen für diese IP gewähren müssen. Ein Beispiel wäre:

mysql> GRANT ALL PRIVILEGES auf dbname. * to root @ '%'; mysql> FLUSH PRIVILEGES;

gewährt allen IPs

0
hitmanDX

Leider unterscheiden sich MySQL-Berechtigungen nach Host und IP. Für einen Hostnamen erteilte Berechtigungen funktionieren für eine IP nicht und umgekehrt.

Stellen Sie sicher, dass Sie Berechtigungen für den Benutzer und die Host-IP/den Hostnamen erteilen, von dem aus Sie eine Verbindung herstellen.

0
Spliffster