MySQL 8.0 リファレンスマニュアル


6.2.19 アカウントロック

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 句を使用するとエラーが発生します。


関連キーワード:  アカウント, ロック, パスワード, 認証, リファレンス, プラガブル, 監査, インストール, セキュリティー, 接続