2016-04-06 12 views
13

Wenn neue Tabellen und Erstellen eines Benutzers mit ihm zu gehen entlang ich in der Regel nur die folgenden Befehle aufzurufen:Wann werden Flush Privileges in MySQL wirklich benötigt?

create database mydb; 
grant all privileges on mydb.* to [email protected] identified by "mypassword"; 

Ich habe nie nach der Ausgabe der letzten beiden Befehle den flush privileges Befehl zu verwenden, benötigt. Benutzer können sich anmelden und ihre Datenbank benutzen und PHP-Skripte ausführen, die sich gut mit der Datenbank verbinden. Trotzdem sehe ich diesen Befehl in fast jedem Tutorial, das ich mir anschaue. Wann wird der flush privileges Befehl wirklich benötigt und wann ist er unnötig?

+1

Es ist eine gute Sache, um zu versuchen, wenn Sachen nicht funktionieren, aber ich habe es nicht als notwendig, was seit mindestens MySQL 5.0 zu sehen. – tadman

+0

'MYTABLE. *' '' MYTABLE' 'als Datenbankname, nicht als Tabellenname. – Barmar

+0

@Barmar Danke, ich habe meinen Code falsch eingegeben. Es ist jetzt behoben. – kojow7

Antwort

17

Privilegien, die über die GRANT-Option zugewiesen werden, benötigen keine FLUSH-PRIVILEGES - der MySQL-Server bemerkt diese Änderungen und lädt die Grant-Tabellen sofort neu.

From MySQL documentation:

Wenn Sie die Berechtigungstabellen direkt wie INSERT-Anweisungen ändern, zu aktualisieren oder DELETE, um Ihre Änderungen haben keine Auswirkungen auf Privileg prüft, bis Sie entweder den Server neu starten oder sagen ihm Laden Sie die Tabellen neu. Wenn Sie die Berechtigungstabellen direkt ändern, aber vergessen, sie erneut zu laden, haben Ihre Änderungen keine Auswirkungen, bis Sie den Server neu starten. Diese kann Sie wundern, warum Ihre Änderungen keinen Unterschied machen!

Um dem Server mitzuteilen, dass er die Berechtigungstabellen erneut laden soll, führen Sie eine Flush-Privileg-Operation aus. Dies kann durch Ausgeben einer FLUSH PRIVILEGES-Anweisung oder durch Ausführen eines mysqladmin flush-privileges oder mysqladmin reload-Befehls erfolgen.

Wenn Sie die Grant-Tabellen ändern indirekt Konto-Management Anweisungen wie GRANT, REVOKE SET Kennwort oder RENAME USER, die Server merken, diese Änderungen und laden die Grant-Tabellen in dem Speicher sofort wieder.

+1

Danke, obwohl ich mich wundere, warum so viele Tutorials ausdrücklich sagen, dass Sie nach einem 'GRANT'-Befehl' Flush-Privilegien' benötigen. – kojow7

1

Nur um ein paar Beispiele zu geben. Angenommen, Sie ändern das Kennwort für einen Benutzer namens "alex". Sie können dieses Passwort auf verschiedene 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 für Grant-Tabellen INSERT, UPDATE oder DELETE verwenden, müssen Sie FLUSH PRIVILEGES verwenden, um die Grant-Tabellen erneut zu laden.

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

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

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

+0

Vielen Dank für ein konkretes Beispiel. – kojow7

Verwandte Themen