2016-04-06 26 views
13

Quando si creano nuove tabelle e un utente di andare con esso Io di solito basta lanciare i seguenti comandi:Quando è veramente necessario il Flush Privileges in MySQL?

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

non ho mai mai avuto bisogno di utilizzare il comando flush privileges dopo il rilascio dei due comandi precedenti. Gli utenti possono accedere e utilizzare il loro database ed eseguire script PHP che si collegano al database bene. Eppure vedo questo comando usato in quasi tutti i tutorial che guardo. Quando è veramente necessario il comando flush privileges e quando non è necessario?

+1

E 'una buona cosa da provare quando roba non funziona, ma non ho visto come una cosa necessaria almeno dal MySQL 5.0. – tadman

+0

'mytable. *' Usa 'mytable' come nome del database, non come nome di una tabella. – Barmar

+0

@Barmar Grazie, ho digitato male il mio codice. È ora riparato. – kojow7

risposta

17

I privilegi assegnati tramite l'opzione GRANT non hanno bisogno che i PRIVILEGI DI FLUSH abbiano effetto - Il server MySQL noterà queste modifiche e ricaricherà immediatamente le tabelle di sovvenzione.

From MySQL documentation:

Se si modificano le tabelle delle autorizzazioni che utilizzano direttamente le dichiarazioni come INSERT, UPDATE o DELETE, le modifiche non hanno effetto sul privilegio controllo finché non si riavviare il server o dirgli di ricaricare le tabelle . Se si modificano direttamente le tabelle di sovvenzione, ma si dimentica di ricaricare , le modifiche non avranno alcun effetto finché non si riavvia il server. Questo potrebbe lasciarti chiedendo perché le tue modifiche sembrano non fare alcuna differenza!

Per comunicare al server di ricaricare le tabelle di sovvenzione, eseguire un'operazione di privilegio di flusso . Questo può essere fatto emettendo una dichiarazione FLUSH PRIVILEGES o eseguendo un mysqladmin flush-privileges o comando mysqladmin reload.

Se si modificano le tabelle grant indirettamente utilizzando l'account di gestione affermazioni come GRANT, REVOKE, PASSWORD SET o rinominare utente, il server accorge questi cambiamenti e carica le tabelle delle autorizzazioni in memoria nuovo immediatamente.

+1

Grazie, anche se mi chiedo il motivo per cui così tanti tutorial dicono specificamente che è necessario usare i "privilegi di svuotamento" dopo un comando 'GRANT'. – kojow7

1

Solo per dare alcuni esempi. Supponiamo che tu modifichi la password per un utente chiamato "alex". È possibile modificare questa password in diversi modi. Ad esempio:

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

Qui è stato utilizzato UPDATE. Se si utilizzano INSERT, UPDATE o DELETE nelle tabelle di sovvenzione, è necessario utilizzare FLUSH PRIVILEGES per ricaricare le tabelle di sovvenzione.

Oppure è possibile modificare la password in questo modo:

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

Qui non è necesary utilizzare "privilegi FLUSH;" Se si modificano le tabelle di sovvenzione in modo indiretto utilizzando le istruzioni di gestione account come GRANT, REVOKE, SET PASSWORD o RENAME USER, il server rileva queste modifiche e carica nuovamente le tabelle di sovvenzione in memoria immediatamente.

+0

Grazie per un esempio concreto. – kojow7

2

TL; TR

si dovrebbe usare FLUSH PRIVILEGES; solo se si modificano le tabelle delle autorizzazioni utilizzando direttamente affermazioni come INSERT, UPDATE o DELETE.

Vedi: Stop using FLUSH PRIVILEGES

+1

Bello e conciso. – kiwicomb123

Problemi correlati