mysqld を起動すると、すべての付与テーブルの内容がメモリーに読み取られます。インメモリーテーブルは、その時点でアクセス制御に有効になります。
ユーザーが GRANT
、REVOKE
、SET PASSWORD
、RENAME USER
などのアカウント管理ステートメントを使用して、付与テーブルを間接的に変更した場合、サーバーはそれらの変更を認識し、再びすぐに付与テーブルをメモリーにロードします。
INSERT
、UPDATE
、DELETE
などのステートメントを使用して、付与テーブルを直接変更する場合、サーバーを再起動するか、テーブルをリロードするようサーバーに指示するまで、変更内容は権限チェックに影響しません。付与テーブルを直接変更したが、それらをリロードし忘れた場合、サーバーを再起動するまで変更は影響しません。このため、変更したのに違いが現れないことを不思議に思うことがあるかもしれません。
付与テーブルをリロードするようサーバーに指示するには、フラッシュ権限操作を実行します。これは、FLUSH PRIVILEGES
ステートメントを発行するか、mysqladmin flush-privileges または mysqladmin reload コマンドを実行することによって行うことができます。
付与テーブルのリロードは、既存のクライアント接続のための権限に次のような影響を及ぼします。
テーブルおよびカラムの権限の変更は、クライアントの次回のリクエストで有効になります。
-
データベース権限の変更は、クライアントが次回
USE
ステートメントを実行したときに有効になります。db_name
注記クライアントアプリケーションがデータベース名をキャッシュしている場合があるため、この影響は、実際に別のデータベースに変更したり、権限をフラッシュしたりしないかぎり、クライアントアプリケーションに認識されないことがあります。
接続済みクライアントについてのグローバルな権限およびパスワードは影響されません。これらの変更は、後続の接続についてのみ有効になります。
サーバーが --skip-grant-tables
オプションを指定して起動された場合、サーバーは付与テーブルを読み取ったりアクセス制御を実装したりしません。すべてのユーザーが接続してあらゆることが可能であるため、セキュアではありません。そのように起動されたサーバーが、テーブルを読み取ってアクセスチェックを有効にするようにするには、権限をフラッシュします。