MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

6.2.16 期限切れパスワードのサーバー処理

MySQL にはパスワードの有効期限機能が用意されており、データベース管理者はパスワードのリセットをユーザーに要求できます。 パスワードは手動で期限切れにすることも、自動期限切れのポリシーに基づいて期限切れにすることもできます (セクション6.2.15「パスワード管理」 を参照)。

ALTER USER ステートメントは、アカウントパスワードの有効期限を有効にします。 例:

ALTER USER 'myuser'@'localhost' PASSWORD EXPIRE;

期限切れのパスワードを持つアカウントを使用する接続ごとに、サーバーはクライアントを切断するか、クライアントを「サンドボックスモード、」に制限します。「サンドボックスモード、」では、クライアントは期限切れのパスワードのリセットに必要な操作のみを実行できます。 サーバーによって実行されるアクションは、後で説明するように、クライアントとサーバーの両方の設定によって異なります。

サーバーがクライアントを切断すると、ER_MUST_CHANGE_PASSWORD_LOGIN エラーが返されます。

shell> mysql -u myuser -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.

サーバーがクライアントをサンドボックスモードに制限する場合、クライアントセッション内では次の操作が許可されます:

セッション内で許可されていない操作の場合、サーバーは ER_MUST_CHANGE_PASSWORD エラーを返します。

mysql> USE performance_schema;
ERROR 1820 (HY000): You must reset your password using ALTER USER
statement before executing this statement.

mysql> SELECT 1;
ERROR 1820 (HY000): You must reset your password using ALTER USER
statement before executing this statement.

このような呼出しはデフォルトでサンドボックスモードになるため、通常は mysql クライアントの対話型呼出しで行われます。 通常の機能を再開するには、新しいパスワードを選択します。

mysql クライアントの非対話型呼出し (バッチモードなど) の場合、パスワードが期限切れになると、サーバーは通常クライアントを切断します。 (サンドボックスモードで許可されたステートメントを使用して) パスワードを変更できるように、非対話型の mysql 呼出しが接続されたままになるようにするには、mysql コマンドに --connect-expired-password オプションを追加します。

前述のように、サーバーが期限切れパスワードクライアントを切断するか、サンドボックスモードに制限するかは、クライアントとサーバーの設定の組合せによって決まります。 次の説明では、関連する設定と、それらがどのように相互作用するのかについて記述します。

注記

この説明は、パスワードが期限切れのアカウントにのみ適用されます。 クライアントが期限切れでないパスワードを使用して接続すれば、サーバーはクライアントを通常どおりに処理します。

クライアント側では、特定のクライアントが期限切れパスワードに対してサンドボックスモードを処理できるかどうかを示します。 C クライアントライブラリを使用するクライアントの場合、これを実行するための方法が 2 つあります。

その他の MySQL コネクタには、サンドボックスモードを処理する準備ができていることを示す独自の規則が用意されています。 目的のコネクタのドキュメントを参照してください。

サーバー側では、クライアントが期限切れパスワードを処理できることを示している場合、サーバーはサンドボックスモードに移行します。

クライアントが期限切れパスワードを処理できることを示していない場合 (または、そのように示すことができない古いバージョンのクライアントライブラリを使用している場合)、サーバーのアクションは disconnect_on_expired_password システム変数の値によって異なります。