Zugriff für Benutzer 'root' @ '%' verweigert


29

Ich habe in MySQL sehr gut auf den Root-Benutzer zugegriffen. Aber in letzter Zeit bin ich nicht mehr in der Lage.

Ich kann mich gut einloggen:

 mysql -u root -p

Hier ist der MySQL-Status nach dem Login:

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2

Connection id:      37
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         4 min 16 sec

Threads: 1  Questions: 112  Slow queries: 0  Opens: 191  
Flush tables: 1  Open tables:  6  Queries per second avg: 0.437
--------------

Aber wenn ich etwas tun möchte, wie zum Beispiel:

mysql> CREATE DATABASE moyennegenerale;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'

Ich verstehe, %wird verwendet, um einen Host zu kennzeichnen, aber mein Status gibt eindeutig localhost an. Hat jemand eine Idee, was los sein könnte?

Antworten:


17

Ich denke, Sie haben anonyme Benutzer

Versuchen Sie Folgendes auszuführen:

SELECT user,host,password FROM mysql.user WHERE user='';

Hier wird angezeigt, welche anonymen Benutzer vorhanden sind. Höchstwahrscheinlich sehen Sie eine Zeile mit einem leeren Benutzer, Host %und einem leeren Kennwort, wie unten gezeigt:

mysql> select user,host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user      | host        | password                                  |
+-----------+-------------+-------------------------------------------+
| lwdba     | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | %           | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| vanilla   | localhost   |                                           |
| mywife    | %           |                                           |
|           | %           |                                           | <<<--- LOOK !!!
| replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| kumar     | %           |                                           |
+-----------+-------------+-------------------------------------------+

Also, wie hast du dich angemeldet? Führen Sie diese Abfrage aus:

SELECT USER(),CURRENT_USER();

Was sagt dir das?

Die zweite Funktion CURRENT_USER()zeigt, wie sich welcher anonyme Benutzer angemeldet hat.

Welche Privilegien hatten Sie beim Einloggen?

Bitte renne

SHOW GRANTS;

Dadurch werden die Berechtigungen angezeigt, die Sie zum Zeitpunkt der Anmeldung hatten. Die Tatsache, dass Sie beim Erstellen einer Datenbank blockiert wurden, zeigt, dass Sie kein Root-Benutzer, sondern ein Benutzer mit niedrigeren Berechtigungen waren.

Bitte bereinigen Sie Ihre Benutzerbewilligungen.

Gehen Sie wie folgt vor, um das root-Passwort zurückzusetzen:

echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql

Diese effiziente Methode habe ich von @ShlomiNoach gelernt .

Versuche es !!!


10

Ich weiß, was du getan hast.

Mach das:

SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';

Sie werden wahrscheinlich feststellen, dass Grant_priv ein 'N' zurückgibt. Also mach das:

UPDATE `mysql`.`user` SET `Grant_priv` = 'Y' WHERE `User` = 'root';
FLUSH PRIVILEGES;
SELECT `User`, `Grant_priv` FROM `mysql`.`user`;

Und walla! Hoffentlich hilft das.


Aus Sicherheitsgründen sollten Sie den Root-Benutzer immer löschen, nachdem Sie einen neuen DBA erstellt haben. Vergewissern Sie sich nur, dass er ALLE PRIVILEGEN ERTEILT hat. Am Ende ist dann das Bit WITH GRANT OPTION. wichtig.
— Kevin Florida

Dies, kombiniert mit dem Schließen und erneuten Öffnen der Verbindung (in meinem Fall von HeidiSQL), hat den Trick gemacht!
— Xorinzor

4

Nachdem Sie als rootBenutzer eingegeben haben, überprüfen Sie Ihre Berechtigungen:

 mysql> show grants for 'root'@'localhost';

Nachdem Sie Ihre Berechtigungen überprüft haben, können Sie versuchen, einem anderen Benutzer alle Berechtigungen zu erteilen, oder Sie können versuchen, dem rootBenutzer erneut alle Berechtigungen zu erteilen :

 mysql> grant all privileges on *.* to 'root'@'localhost';

Wenn Ihr rootBenutzer keine Berechtigungen hat, können Sie versuchen, diese wiederherzustellen.

Stoppen Sie den mysqldServer

Starten Sie den Server auf diese Weise neu mysqld_safe --skip-grant-table

Wiederherstellen von rootBerechtigungen mit:

 mysql> flush privileges;
 mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;

Dies ist, was ich bekomme, nachdem die Show den Befehl 'root' @ 'localhost' erteilt hat: FEHLER 1141 (42000): Für Benutzer 'root' auf Host 'localhost' ist keine solche

Was ist die Ausgabe des zweiten Befehls?

2
Es gibt eine "bessere" Möglichkeit, dies in Debian zu tun, wo Sie den Server nicht neu starten müssen. Genauso rootverbinden wie debian-sys-maint@localhostund das Passwort in verwenden /etc/mysql/debian.cnf. Dieser Benutzer hat ALLE Berechtigungen in MySQL. Das Gute ist, dass Sie Ihren Server nicht neu starten müssen.
— Anders

Versuche dies. sudo mysql - defaults-file = /etc/mysql/debian.cnf
— Anders

0

Ihre Privilegien können reduziert werden?

Sie können auch versuchen, ein anderes Konto mit Root-Rechten zu erstellen.

Löschen Sie den Root-Benutzer und erstellen Sie ihn mit den angegebenen Berechtigungen neu.

Dies kann hilfreich sein: http://dev.mysql.com/doc/refman/5.5/de/resetting-permissions.html

C.5.4.1.2 - LINUX (Datei mit Abfrage erstellen, die einen neuen Benutzer mit vollen Root-Rechten erstellt)

C.5.4.1.1 - Windows (Datei mit Abfrage erstellen, die einen neuen Benutzer mit vollständigen Root-Rechten erstellt)

Abfrage: (Root-Benutzer erstellen)

  CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
  GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

MySQL Manual Benutzer erstellen: http://dev.mysql.com/doc/refman/5.5/de/adding-users.html

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.