MySQLのFLUSH PRIVILEGESの使い方

MySQLのFLUSH PRIVILEGESについて

FLUSH PRIVILEGESはMySQLやMariaDBにおいて、ユーザー権限に関連するキャッシュをリロードするために使われるSQLコマンドです。
データベース内のユーザー権限はメモリ内のキャッシュに保持されており、これにより権限のチェックが迅速に行われます。
しかし、新しい権限が追加されたり、既存の権限が変更された際に、メモリ内のキャッシュは自動的には更新されません。
そのため、これらの変更をすぐに有効にするにはFLUSH PRIVILEGESコマンドが必要です。

具体的な使用シーンとして、以下のような場面で使います。

1. ユーザーの作成や削除
新しいユーザーを作成した場合、FLUSH PRIVILEGESを実行しないと、そのユーザーがすぐには利用できないことがあります。
CREATE USERやDROP USERなどのコマンドを実行した後にFLUSH PRIVILEGESを行うことで、作成したユーザーや削除されたユーザーの権限情報がすぐに有効化されます。

2. ユーザー権限の変更
既存ユーザーに対して権限を追加したり、削除した場合も同様にFLUSH PRIVILEGESを使います。
GRANTやREVOKEでユーザーの権限を変更しても、その変更は即座に有効にならないため、このコマンドを使用することで新しい権限が適用されます。

3. 権限テーブルの手動編集後
通常、MySQLの権限情報はmysqlデータベース内のテーブル(たとえばuserテーブルやdbテーブルなど)に格納されています。
これらのテーブルを直接SQLで編集した場合(たとえばUPDATE文で直接権限を変更した場合など)、FLUSH PRIVILEGESを実行する必要があります。
これは、MySQLがメモリ上に保持している権限キャッシュを新しい内容にリロードするためです。

FLUSH PRIVILEGESの構文はいたってシンプルです。

FLUSH PRIVILEGES;

これを実行することで、現在のセッション中に行われたすべての権限変更が有効化されます。

なお、MySQLのバージョンによってはGRANTやREVOKEを使うと自動的に権限のリロードが行われるため、FLUSH PRIVILEGESが不要な場合もあります。
ただし、mysqlデータベースの権限テーブルを手動で操作した場合は、常にこのコマンドを使う必要があります。

FLUSH PRIVILEGESが不要な場合

MySQL 5.7以降では、ユーザー作成や権限付与の操作後に、MySQLが自動的に権限キャッシュをリロードするようになっています。
たとえば、CREATE USERやGRANTを実行した際には、その都度FLUSH PRIVILEGESを実行しなくても権限が即時反映されます。
しかし、MySQLの動作やバージョンに依存するため、状況に応じて手動でのリロードが必要なこともあります。

注意点

FLUSH PRIVILEGESは管理者権限が必要な操作です。
したがって、FLUSH PRIVILEGESを実行するには、SUPERもしくはRELOAD権限を持っている必要があります。
通常は、rootユーザーや、特別に設定されたデータベース管理者ユーザーで実行することになります。

また、FLUSH PRIVILEGESは他のFLUSHコマンドと同様に、特定のキャッシュやテーブルをリロードするための一連の操作の一部です。
たとえば、FLUSH TABLESやFLUSH HOSTSといったコマンドもありますが、これらは別の目的で使われます。
FLUSH PRIVILEGESはあくまでユーザー権限に関する操作に限定されています。

まとめ

FLUSH PRIVILEGESはMySQLやMariaDBにおける権限情報の即時反映を目的としたコマンドで、権限に関する変更を行った際にその変更を有効にするために使用されます。
権限変更後は自動的に反映されることが多いですが、手動でのテーブル操作や特定のシステム環境では、FLUSH PRIVILEGESを実行するようにしましょう。