mysqld を起動すると、メモリにすべての権限テーブルが読み込まれます。この時点で、内部メモリのテーブルがアクセス制御の効力を施行します。
サーバが権限テーブルをリロードするときは、既存のクライアント接続の権限は次のように発効します。
テーブルとカラムの権限での変更はクライアントが次に要求を行なうときに発効する。
データベースの権限での変更は、次の
USE
ステートメントを発行するときに発効する。
db_name
ノート:クライアント
アプリケーションは、データベース名をキャッシュしていることがあるため、実際に別のデータベースを変更するか、FLUSH
PRIVILEGES
ステートメント
を実行しないと、権限効力を発揮できない可能性がある。
グローバル権限とパスワードでの変更は、次にクライアントが接続するときに発効する。
GRANT
, REVOKE
, or
SET PASSWORD
などのステートメントを使用して、間接的に権限テーブルを変更する場合は、サーバがこれらの変更を認識し、その変更があった直後に権限テーブルをメモリへリロードします。
INSERT
、UPDATE
、DELETE
などのステートメントを使用して、直接に権限テーブルを変更する場合は、サーバを再起動するか、またはテーブルのリロードを行なうまでその権限チェックは施行しません。手動で権限テーブルをリロードするには、FLUSH
PRIVILEGES
ステートメントを発行するか、mysqladmin
flush-privileges または mysqladmin
reload コマンドを実行します。
権限テーブルを直接変更したけれど、リロードを忘れたという場合、単に、サーバを再起動するまで、その効果は発揮しません。変更したにも関わらず、その効果がないようなときは、再起動することをお勧めします。