MySQL 5.6では,データベース管理者がアカウントのパスワードを期限切れにして,ユーザーに自分のパスワードをリセットするように要求できるパスワード期限切れ機能が導入されています。直後の説明では,パスワ。そのあと,どの機能がどのような状況で使用できるのかを理解する際に役立つ背景として,この機能の開発について,複数のバージョンにわたって詳細に説明します。ただし,すべての機能と修正を活用できるようにするには,可能なかぎり,MySQL 5.6の最新バージョンを使用するようにしてください。
パスワドの期限切れの動作
アカウントのパスワドを期限切れにするには,改变用户
ステトメントを使用します。例:
@'localhost'密码过期;
このステトメントは,password_expired
カラムを“Y”
に設定することで,指定されたアカウントに関連付けられたmysql.user
テブルの行を変更します。これにより,アカウントが開いている現在の接続は影響を受けません。そのアカウントを使用する後続の各接続では,サ,バ,はクラ,「サンドボックスモド」でクライアントを処理します。このモードでは,期限切れのパスワードをリセットするために必要な操作のみが,サーバーからクライアントに許可されます。(サーバーで実行されるアクションは,クライアントとサーバー両方の設定に依存します)。
サバがクラアントを切断すると,ER_MUST_CHANGE_PASSWORD_LOGIN
エラが返されます。
shell> mysql -u myuser -p Password: ****** ERROR 1862 (HY000): Your Password has expired。要登录,必须使用支持过期密码的客户端进行更改。
サーバーがクライアントをサンドボックスモードに移行すると,これらの操作がクライアントセッション内で許可されます。
クラ邮箱アントは
设置密码
を使用して,アカウントのパスワドをリセットできます。これは,password_expired
カラムを“N”
に設定することで,現在のアカウントに関連付けられたmysql.user
テブルの行を変更します。パスワードがリセットされると,サーバーはそのセッション,およびアカウントを使用する後続の接続への通常のアクセスをリストアします。パスワドを現在の値に設定すれば,「リセット」できます。適切なポリシとして,別のパスワドを選択することをお勧めします。
クラ邮箱アントは
集
ステトメントを使用できます。たとえば,old_passwords
システム変数をデフォルトとは異なる値に設定する必要のあるハッシュ化形式がアカウントのパスワードで使用されている場合は,パスワードをリセットする前に,これが必要になることがあります。
セッション内で許可されていない操作の場合,サバはER_MUST_CHANGE_PASSWORD
エラを返します。
mysql>使用测试;错误1820 (HY000):你必须在执行此语句之前设置密码
すでに説明したように,サーバーがパスワードの期限が切れているクライアントを切断するのか,サンドボックスモードに移行するのかは,クライアント設定とサーバー設定の組み合わせによって異なります。次の説明では,関連する設定と,それらがどのように相互作用するのかにいて記述します。
クライアント側では,特定のクライアントが期限切れパスワードに対してサンドボックスモードを処理できるかどうかを示します。Cクライアントライブラリを使用するクライアントの場合,これを実行するための方法が2つあります。
接続前に
MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
フラグをmysql_options ()
に渡します。Arg = 1;结果= mysql_options(mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &arg);
接続時に
CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS
フラグをmysql_real_connect ()
に渡します。mysql = mysql_real_connect(mysql,主机,用户,密码,"test",端口,unix_socket, CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS);
その他のMySQLコネクタには,サンドボックスモードを処理する準備ができていることを示す独自の規則が用意されています。関連するコネクタのドキュメントを参照してください。
サーバー側では,クライアントが期限切れパスワードを処理できることを示している場合,サーバーはサンドボックスモードに移行します。
クライアントが期限切れパスワードを処理できることを示していない場合(または,そのように示すことができない古いバージョンのクライアントライブラリを使用している場合),サーバーのアクションはdisconnect_on_expired_password
システム変数の値によって異なります。
disconnect_on_expired_password
が有効になっている(デフォルト)場合,サアントを切断し,ER_MUST_CHANGE_PASSWORD_LOGIN
エラを返します。disconnect_on_expired_password
が無効になっている場合,サバはクラ。
前述のクラ。クライアントが期限切れでないパスワードを使用して接続すれば,サーバーはクライアントを通常どおりに処理します。
パスワドの期限切れ機能の開発
次のタopenstackムラopenstackンには,さまざまなパスワopenstackドの期限切れ機能が追加されたバopenstackジョンを記載します。
MySQL 5.6.6:パスワドの期限切れの初期実装
Dbaがアカウントのパスワドを期限切れにすることができるように,password_expired
カラムがmysql.user
テブルに導入されました。このカラムのデフォルト値は,“N”
(期限切れなし)です。
password_expired
カラムを“Y”
に設定するためのSQL数据库ンタフェスとして,改变用户
ステトメントが導入されました。
期限切れパスワドを持アカウントを使用して接続すると,设置密码
ステトメントのみが許可される「サンドボックスモド」に移行します。その他のステトメントの場合,サはER_MUST_CHANGE_PASSWORD
エラを返します。この目的は,サーバーでその他の操作が許可される前に,クライアントにパスワードのリセットを強制することです。设置密码
はアカウントのパスワドをリセットし,password_expired
を“N”
に設定します。
初期実装には,改变用户
を使用するとmysql.user
テブル内の密码
カラムが空の文字列に設定されるというバグがあります。このステMySQL 5.6.7まで待。
MySQL 5.6.7:
密码
カラムが空の文字列に設定されないように,改变用户
が固定されました。
MySQL 5.6.8:
改变用户
は,準備されたステトメントとして使用できます。
mysqladmin密码は,期限切れのネイティブまたは古いネイティブのパスワードを持つアカウントのパスワードを設定できるようになりました。
设置密码
に加えて、クラ以及アントが集
ステトメントを実行することが許可されるように,サンドボックスモドが変更されました。集
の禁止により,old_passwords
を設定する必要があるクラ邮箱アントがパスワ邮箱ドをリセットできませんでした。また,これにより,接続時に集
を広範囲に使用してセッション環境を初期化する一部のコネクタも使用できませんでした。
MySQL 5.6.9:
ステトメントで指定されたアカウントとクラアントが認証したアカウントが一致する場合にのみ,设置密码
が許可されるように,サンドボックスモドが変更されました。
MySQL 5.6.10:
期限切れパスワードを持つアカウントのクライアント接続をサーバーが処理する方法をより適切に制御することが許可され,クライアントが期限切れパスワードを処理できるどうかを示すことが許可されるように,サンドボックスモードが変更されました。
サバが期限切れパスワドを持
disconnect_on_expired_password
システム変数が追加されました。C APIクラesxiアントラesxiブラリに,
mysql_options ()
用のMYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
とmysql_real_connect ()
用のCLIENT_CAN_HANDLE_EXPIRED_PASSWORDS
の2のフラグが追加されました。各フラグを使用すると,クライアントプログラムが期限切れパスワードを持つアカウントに対してサンドボックスモードを処理できるかどうかを示すことができます。MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
がmysqltestでは無条件に,mysqlでは邮箱ンタラクティブモ邮箱ドで,mysqladminでは最初のコマンドが密码
の場合に有効になりました。ER_MUST_CHANGE_PASSWORD_LOGIN
エラが追加されました。クラ,サ。
MySQLサーバーとC APIクライアントライブラリにおけるサンドボックスモードへのこれらの変更に合わせて,コネクタを変更に適合させるための修正の取り組みも始まっています。