MySQL では、CREATE USER
および ALTER USER
ステートメントの ACCOUNT LOCK
句および ACCOUNT UNLOCK
句を使用したユーザーアカウントのロックおよびロック解除がサポートされています:
-
これらの句を
CREATE USER
とともに使用すると、新しいアカウントの初期ロック状態を指定できます。 どちらの句もない場合、アカウントはロック解除された状態で作成されます。validate_password
コンポーネントが有効な場合、アカウントがロックされていても、パスワードなしでのアカウントの作成は許可されません。 セクション6.4.3「パスワード検証コンポーネント」を参照してください。 -
これらの句を
ALTER USER
とともに使用すると、既存のアカウントの新しいロック状態を指定できます。 どちらの句もない場合、アカウントのロック状態は変更されません。MySQL 8.0.19 の時点では、ログインの失敗回数が多すぎるために一時的にロックされているステートメントで指定されたアカウントは、
ALTER USER ... UNLOCK
によってロック解除されます。 セクション6.2.15「パスワード管理」を参照してください。
アカウントのロック状態は、mysql.user
システムテーブルの account_locked
カラムに記録されます。 SHOW CREATE USER
からの出力には、アカウントがロックされているかロック解除されているかが示されます。
クライアントがロックされたアカウントに接続しようとすると、試行は失敗します。 サーバーは、ロックされたアカウントへの接続試行回数を示す Locked_connects
ステータス変数を増分し、ER_ACCOUNT_HAS_BEEN_LOCKED
エラーを返して、エラーログにメッセージを書き込みます:
Access denied for user 'user_name'@'host_name'.
Account is locked.
アカウントをロックしても、ロックされたアカウントのアイデンティティを想定するプロキシユーザーを使用して接続できることには影響しません。 また、ロックされたアカウントを指定する DEFINER
属性を持つストアドプログラムまたはビューを実行する機能にも影響しません。 つまり、プロキシ設定されたアカウント、ストアドプログラムまたはビューを使用する機能は、アカウントをロックしても影響を受けません。
アカウントロック機能は、mysql.user
システムテーブルに account_locked
カラムが存在するかどうかによって異なります。 5.7.6 より古い MySQL バージョンからのアップグレードの場合は、MySQL のアップグレード手順を実行して、このカラムが存在することを確認します。 セクション2.11「MySQL のアップグレード」を参照してください。 account_locked
カラムがないアップグレードされていないインストールの場合、サーバーはすべてのアカウントをロック解除済として扱い、ACCOUNT LOCK
句または ACCOUNT UNLOCK
句を使用するとエラーが発生します。