Wann ist Flush Privileges in MySQL wirklich notwendig?

Wenn ich neue Tabellen und einen dazugehörigen Benutzer erstelle, rufe ich normalerweise nur die folgenden Befehle auf:

CREATE DATABASE mydb;
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY "mypassword";

Ich musste noch nie den Befehl FLUSH PRIVILEGES verwenden, nachdem ich die beiden vorherigen Befehle ausgeführt hatte. Die Benutzer können sich anmelden und ihre Datenbank verwenden und PHP-Skripte ausführen, die sich problemlos mit der Datenbank verbinden. Dennoch sehe ich diesen Befehl in fast jedem Tutorial, das ich mir ansehe.

Wann ist der Befehl FLUSH PRIVILEGES wirklich notwendig und wann ist er unnötig?

Lösung

Privilegien, die durch die Option GRANT zugewiesen werden, benötigen kein FLUSH PRIVILEGES, um wirksam zu werden - der MySQL-Server wird diese Änderungen bemerken und die Grant-Tabellen sofort neu laden.

Aus der MySQL-Dokumentation:

Wenn Sie die Berechtigungstabellen direkt mit Anweisungen wie INSERT, UPDATE oder DELETE, haben Ihre Änderungen keine Auswirkung auf die Berechtigungsprüfung Prüfung, bis Sie entweder den Server neu starten oder ihn anweisen, die Tabellen neu laden. Wenn Sie die Berechtigungstabellen direkt ändern, aber vergessen, sie neu zu laden sie neu zu laden, haben Ihre Änderungen keine Auswirkung, bis Sie den Server neu starten. Diese kann dazu führen, dass Sie sich fragen, warum Ihre Änderungen scheinbar keinen Unterschied machen!

Um den Server anzuweisen, die Berechtigungstabellen neu zu laden, führen Sie einen flush-privileges Operation. Dies kann durch die Ausgabe eines FLUSH PRIVILEGES-Anweisung oder durch Ausführen eines mysqladmin flush-privileges oder mysqladmin reload Befehl.

Wenn Sie die Berechtigungstabellen indirekt mit Account-Management Anweisungen wie GRANT, REVOKE, SET PASSWORD oder RENAME USER ändern, bemerkt der Server diese Änderungen und lädt die Berechtigungstabellen sofort wieder in den Speicher sofort wieder in den Speicher.

Kommentare (3)

TL;DR

Sie sollten FLUSH PRIVILEGES; nur verwenden, wenn Sie die Grant-Tabellen direkt mit Anweisungen wie INSERT, UPDATE oder DELETE ändern.

Kommentare (1)

Um nur einige Beispiele zu nennen. Nehmen wir an, Sie ändern das Passwort für einen Benutzer namens 'alex'. Sie können dieses Kennwort auf mehrere Arten ändern. Zum Beispiel:

mysql> update* user set password=PASSWORD('test!23') where user='alex'; 
mysql> flush privileges;

Hier haben Sie UPDATE verwendet. Wenn Sie INSERT, UPDATE oder DELETE direkt auf Grant-Tabellen anwenden, müssen Sie FLUSH PRIVILEGES verwenden, um die Grant-Tabellen neu zu laden.

Oder Sie können das Passwort wie folgt ändern:

mysql> set password for 'alex'@'localhost'= password('test!24');

Hier ist es nicht notwendig, "FLUSH PRIVILEGES;&quot zu verwenden; Wenn Sie die Berechtigungstabellen indirekt mit Anweisungen zur Kontenverwaltung wie GRANT, REVOKE, SET PASSWORD oder RENAME USER ändern, bemerkt der Server diese Änderungen und lädt die Berechtigungstabellen sofort wieder in den Speicher.

Kommentare (1)