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?

RolandoMySQLDBA
quelle

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 !!!

RolandoMySQLDBA
quelle
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.

Kevin Florida
quelle
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;
Atropo
quelle
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

David Metcalfe
quelle