it-swarm.com.de

Entfernen Sie die Berechtigungen aus der MySQL-Datenbank

Bevor Sie denken, dass dies eine doppelte Frage ist, glaube ich, dass ich einen einzigartigen Fall habe, auch wenn er etwas düster ist.

Vor ein paar Tagen habe ich die Version von MySQL auf meinem Ubuntu 10.04-Server auf 5.3.3 aktualisiert (vor den Ubuntu-Releases für 10.04). Heute habe ich versucht, mich für etwas in phpMyAdmin einzuloggen und habe das etwas gefürchtete Connection for controluser as defined in your configuration failed Error.

Nachdem ich Beschreibungen von mehreren SO Fragen zur Behebung dieses Problems gefolgt bin, bin ich festgefahren.

  • Ich habe versucht, phpMyAdmin neu zu konfigurieren , ohne Erfolg.
  • Ich habe versucht, phpMyAdmin zu deinstallieren und neu zu installieren es, aber es konnte die Berechtigungen aus der Datenbank nicht entfernen und schlug fehl.
  • Ich habe dann versucht, die Berechtigungen manuell zu entfernen des Benutzers - etwas dumm, könnte ich hinzufügen - aus der DB zu entfernen, dann die Datenbank zu löschen, dann den Benutzer (mit flush privileges).
  • Ich habe die gesamte Installation von phpMyAdmin komplett gelöscht (Löschen der Anwendung und des/etc/phpmyadmin-Verzeichnisses) und neu installiert (mit apt-get), aber die Berechtigungen für den phpmyadmin-Benutzer waren bereits vorhanden:

granting access to database phpmyadmin for [email protected]: already exists

Also, hier ist, was mir übrig bleibt. Ich habe eine Bewilligung, die ich nicht ändern oder widerrufen kann:

mysql> show grants for 'phpmyadmin'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost'                                                |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.26 sec)

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on Host 'localhost'

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost' identified by 'trustno1';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on Host 'localhost'

(Keine Sorge, ich verwende dieses Passwort nicht mehr, aber es war das zuvor verwendete Passwort und es ist nicht das Passwort, das ich für die neue phpmyadmin-Installation gewählt habe.).

Wie entferne ich diese Berechtigungen vollständig? Gerne beginne ich bei Bedarf wieder von vorne (phpmyadmin also nicht die DB).

50
Cyntech

Das USAGE-Privileg in mysql bedeutet einfach, dass es keine Privilegien für den Benutzer 'phpadmin' @ 'localhost' gibt, der auf globaler Ebene definiert ist *.*. Zusätzlich hat derselbe Benutzer das ALL-Privileg für die Datenbank phpmyadmin phpadmin.*.

Wenn Sie also alle Berechtigungen entfernen und ganz von vorne beginnen möchten, gehen Sie wie folgt vor:

  • Alle Berechtigungen auf Datenbankebene entziehen:

    REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';

  • Lösche den Benutzer 'phpmyadmin' @ 'localhost'

    DROP USER 'phpmyadmin'@'localhost';

Durch die oben beschriebene Prozedur wird der Benutzer vollständig aus Ihrer Instanz entfernt. Dies bedeutet, dass Sie ihn von Grund auf neu erstellen können.

Um Ihnen ein wenig Hintergrundwissen über das oben Beschriebene zu geben: Sobald Sie einen Benutzer anlegen, wird die Tabelle mysql.user Ausgefüllt. Wenn Sie sich einen Datensatz darin ansehen, werden der Benutzer und alle Berechtigungen auf 'N' Gesetzt. Wenn Sie einen show grants for 'phpmyadmin'@'localhost'; Eingeben, sehen Sie die bereits bekannte Ausgabe oben. Einfach übersetzt in "Keine Berechtigungen auf globaler Ebene für den Benutzer". Wenn Sie diesem Benutzer auf Datenbankebene ALL gewähren, wird dies in der Tabelle mysql.db Gespeichert. Wenn Sie einen SELECT * FROM mysql.db WHERE db = 'nameofdb'; Eingeben, wird auf jedem priv ein 'Y' Angezeigt.

Oben beschrieben, zeigt das Szenario, das Sie derzeit auf Ihrer Datenbank haben. Wenn ein Benutzer also nur die Berechtigung USAGE hat, kann dieser Benutzer eine Verbindung herstellen, hat aber außer SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS; Keine weiteren Berechtigungen.

100
Flo Doe

Als Randnotiz, der Grund revoke usage on *.* from 'phpmyadmin'@'localhost'; funktioniert nicht ganz einfach: Es gibt keine Bewilligung mit dem Namen USAGE.

Die aktuell genannten Zuwendungen finden Sie in der MySQL-Dokumentation

Die Erteilung USAGE ist eine logische Erteilung. Wie? 'phpmyadmin' @ 'localhost' hat einen Eintrag in mysql.user wobei user = 'phpmyadmin' und Host = 'localhost'. Jede Zeile in mysql.user bedeutet semantisch USAGE. Laufen DROP USER 'phpmyadmin'@'localhost'; sollte gut funktionieren. Unter der Haube macht es das wirklich:

DELETE FROM mysql.user WHERE user='phpmyadmin' and Host='localhost';
DELETE FROM mysql.db   WHERE user='phpmyadmin' and Host='localhost';
FLUSH PRIVILEGES;

Daher ist die Entfernung einer Zeile aus mysql.user konstituiert das Laufen REVOKE USAGE, obwohl REVOKE USAGE kann nicht buchstäblich ausgeführt werden.

14
RolandoMySQLDBA