このドキュメントでは、MySQLモードにおけるダブルパスワード管理の設定方法、動作、および関連する例を説明します。ダブルパスワード管理機能により、ユーザーは有効なパスワードを2つ同時に持つことができます。それぞれメインパスワード(Primary Password)とセカンダリパスワード(Secondary Password)です。メインパスワードは現在有効な新しいパスワードであり、セカンダリパスワードは保持される古いパスワードです。両方を同時に使用してログインすることができ、これをダブルパスワード状態と呼びます。この機能は、設定切り替え期間中も古いパスワードで接続できるようにし、一度に全量のパスワード変更に伴う接続切断リスクを低減するために利用できます。
説明
この機能はV4.4.2 BP1バージョンからサポートされています。
構文
ALTER USER または SET PASSWORD ステートメントを使用して、ユーザーパスワードを変更しつつ古いパスワードを保持し、ダブルパスワード状態に入ることができます。
パスワードを変更して現在のパスワードを保持する
新しいパスワードを設定すると同時に元のパスワードを保持します(新旧のパスワードは一定期間認証に使用できます):
ALTER USER 'user_name'@'host'
IDENTIFIED BY 'new_password' RETAIN CURRENT PASSWORD;
user_name、host:ユーザー作成時のアカウント名ルールと同じです(例:'appuser'@'%')。new_password:新しいパスワードの平文(サーバー側がプラグインポリシーに従って保存)。
ALTER USER の他に、SET PASSWORD ステートメントでも代入句の末尾に RETAIN CURRENT PASSWORD を追加することができ、これは ALTER USER ... IDENTIFIED BY ... RETAIN CURRENT PASSWORD と同じ効果があります:
SET PASSWORD [FOR user] = PASSWORD('new_password') RETAIN CURRENT PASSWORD;
古いパスワードを破棄する
新しいパスワードへの切り替えが完了した後、保持されていた古いパスワードを明示的に破棄し、現在のパスワードのみを保持します:
ALTER USER 'user_name'@'host' DISCARD OLD PASSWORD;
実行が成功すると、古いパスワードはログインに使用できなくなります。
構文の説明
- 現在のユーザー自身のパスワードを変更する場合を除き、
ALTER USERを実行するには通常CREATE USERなどの対応する管理権限が必要です。権限要件は一般的なALTER USERと同じです。 ALTER USERの場合、RETAIN CURRENT PASSWORDはIDENTIFIED BYと同時に指定された場合にのみ意味をなします。今回のパスワード変更でダブルパスワード状態に入ることを表します。SET PASSWORDの場合は、=の右側のパスワードオプションの後にこの句を追加します。DISCARD OLD PASSWORDは、業務がすべて新しいパスワードに切り替わった後、古いパスワードをクリーンアップするために使用されます。現在有効な古いパスワードが存在しない場合は、エラーメッセージに従います。
例
ユーザー appuser の任意のホストからの接続アカウントパスワードを NewPass に変更し、パスワード変更前の古いパスワードは保持します:
obclient> ALTER USER 'appuser'@'%' IDENTIFIED BY 'NewPass' RETAIN CURRENT PASSWORD;
または SET PASSWORD を使用することもできます(効果は同等です):
obclient> SET PASSWORD FOR 'appuser'@'%' = PASSWORD('NewPass') RETAIN CURRENT PASSWORD;
業務が新しいパスワードに切り替わったことを確認した後、古いパスワードを破棄します:
obclient> ALTER USER 'appuser'@'%' DISCARD OLD PASSWORD;
機能のメンテナンス
二要素認証に関連する情報はシステムテーブル/ビューに反映されるため、監査やメンテナンスが容易になります:
- mysql.user ビューの
user_attributes列のadditional_passwordキーは、二要素認証シナリオで古いパスワードに関連する属性を格納します。 - oceanbase.DBA_OB_USERS または oceanbase.CDB_OB_USERS ビューの
OLD_PASSWORD、OLD_PASSWORD_START_TIME列は二要素認証シナリオで使用されます。