MySQL の Flush Privileges が本当に必要なときは?
新しいテーブルとそれに付随するユーザーを作成する場合、通常は以下のコマンドを実行します。
CREATE DATABASE mydb;
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY "mypassword";
前述の2つのコマンドを実行した後に、FLUSH PRIVILEGES
コマンドを使用する必要があったことは一度もありません。ユーザーはログインしてデータベースを使用することができ、データベースに接続するPHPスクリプトも問題なく実行できます。しかし、ほとんどのチュートリアルでこのコマンドが使われているのを見ます。
FLUSH PRIVILEGES`コマンドが本当に必要なのはどんなときで、不要なのはどんなときでしょうか?
45
3
GRANT オプションで割り当てられた特権は、FLUSH PRIVILEGES を必要とせず、MySQL サーバはこれらの変更に気づき、グラント テーブルを直ちに再読み込みします。
MySQLドキュメントより。
TL;DR。
FLUSH PRIVILEGES;
は、
INSERT,
UPDATE,
DELETE` などのステートメントを使用してグラントテーブルを直接変更する場合にのみ使用する必要があります。いくつか例を挙げてみましょう。例えば、'alex'というユーザーのパスワードを変更するとします。このパスワードはいくつかの方法で変更できます。例えば、以下のようになります。
ここではUPDATEを使用しています。グラントテーブルに直接INSERT、UPDATE、DELETEを使用した場合、グラントテーブルを再読み込みするためにFLUSH PRIVILEGESを使用する必要があります。
または、次のようにパスワードを変更することもできます。
ここでは、"FLUSH PRIVILEGES;"を使用する必要はありません。 GRANT、REVOKE、SET PASSWORD、RENAME USERなどのアカウント管理文を使って間接的にグラントテーブルを変更した場合、サーバーはその変更に気付き、グラントテーブルをすぐにメモリにロードし直します。