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


13.7.1.10 SET PASSWORD ステートメント

SET PASSWORD [FOR user] auth_option
    [REPLACE 'current_auth_string']
    [RETAIN CURRENT PASSWORD]

auth_option: {
    = 'auth_string'
  | TO RANDOM
}

SET PASSWORD ステートメントは、MySQL ユーザーアカウントにパスワードを割り当てます。 パスワードは、ステートメントで明示的に指定するか、MySQL によってランダムに生成されます。 このステートメントには、置換するアカウントの現在のパスワードを指定する password-verification 句と、アカウントにセカンダリパスワードがあるかどうかを管理する句を含めることもできます。'auth_string'および'current_auth_string'はそれぞれクリアテキスト (暗号化されていない) パスワードを表します。

注記

SET PASSWORD を使用してパスワードを割り当てるのではなく、ALTER USER はアカウントの変更 (パスワードの割当てを含む) に優先ステートメントです。 例:

ALTER USER user IDENTIFIED BY 'auth_string';
注記

ランダムパスワード生成、パスワード検証およびセカンダリパスワードの句は、資格証明を MySQL に内部的に格納する認証プラグインを使用するアカウントにのみ適用されます。 MySQL の外部にある資格証明システムに対して認証を実行するプラグインを使用するアカウントの場合、パスワード管理もそのシステムに対して外部で処理する必要があります。 内部資格証明記憶域の詳細は、セクション6.2.15「パスワード管理」 を参照してください。

REPLACE 'current_auth_string'句はパスワード検証を実行し、MySQL 8.0.13 の時点で使用できます。 指定された場合:

  • REPLACE は、置換するアカウントの現在のパスワードをクリアテキスト (暗号化されていない) 文字列として指定します。

  • 現在のパスワードを指定するためにアカウントのパスワード変更が必要な場合は、変更しようとしているユーザーが実際に現在のパスワードを知っていることを確認するために、句を指定する必要があります。

  • アカウントのパスワードが変更される可能性があるが、現在のパスワードを指定する必要がない場合、句はオプションです。

  • 句が指定されているが、句がオプションであっても現在のパスワードと一致しない場合、ステートメントは失敗します。

  • REPLACE は、現在のユーザーのアカウントパスワードを変更する場合にのみ指定できます。

現在のパスワードを指定したパスワード検証の詳細は、セクション6.2.15「パスワード管理」 を参照してください。

RETAIN CURRENT PASSWORD 句はデュアルパスワード機能を実装し、MySQL 8.0.14 の時点で使用できます。 指定された場合:

  • RETAIN CURRENT PASSWORD は、アカウントの現在のパスワードをセカンダリパスワードとして保持し、既存のセカンダリパスワードを置き換えます。 新しいパスワードはプライマリパスワードになりますが、クライアントはアカウントを使用して、プライマリパスワードまたはセカンダリパスワードのいずれかを使用してサーバーに接続できます。 (例外: SET PASSWORD ステートメントで指定された新しいパスワードが空の場合、RETAIN CURRENT PASSWORD が指定されていても、セカンダリパスワードも空になります。)

  • プライマリパスワードが空のアカウントに RETAIN CURRENT PASSWORD を指定すると、ステートメントは失敗します。

  • アカウントにセカンダリパスワードがあり、RETAIN CURRENT PASSWORD を指定せずにプライマリパスワードを変更した場合、セカンダリパスワードは変更されません。

デュアルパスワードの使用の詳細は、セクション6.2.15「パスワード管理」 を参照してください。

SET PASSWORD では、次の auth_option 構文が許可されます:

  • = 'auth_string'

    アカウントに指定されたリテラルパスワードを割り当てます。

  • TO RANDOM

    MySQL によってランダムに生成されたパスワードをアカウントに割り当てます。 このステートメントは、ステートメントを実行しているユーザーまたはアプリケーションが使用できるように、クリアテキストのパスワードも結果セットに返します。

    ランダムに生成されるパスワードの結果セットおよび特性の詳細は、ランダムパスワード生成 を参照してください。

    ランダムパスワード生成は、MySQL 8.0.18 の時点で使用できます。

重要

状況によっては、SET PASSWORD がサーバーログ、またはクライアント側にある ~/.mysql_history などの履歴ファイル内に記録されることがあります。つまり、平文のパスワードが、その情報に対する読み取りアクセス権を持つ任意のユーザーによって読み取られる可能性があります。 これがサーバーログで発生する条件およびこれを制御する方法については、セクション6.1.2.3「パスワードおよびロギング」を参照してください。 クライアント側のロギングに関する同様の情報については、セクション4.5.1.3「mysql クライアントロギング」を参照してください。

SET PASSWORD は、ユーザーアカウントを明示的に指定する FOR 句の有無にかかわらず使用できます:

  • このステートメントでは、FOR user 句を使用して、存在する必要がある指定アカウントのパスワードを設定します:

    SET PASSWORD FOR 'jeffrey'@'localhost' = 'auth_string';
  • FOR user 句を指定しない場合、ステートメントは現在のユーザーのパスワードを設定します:

    SET PASSWORD = 'auth_string';

    匿名以外のアカウントを使用してサーバーに接続したクライアントはすべて、そのアカウントのパスワードを変更できます。 (特に、自分のパスワードを変更できます。) サーバーが認証したアカウントを確認するには、CURRENT_USER() 関数を呼び出します:

    SELECT CURRENT_USER();

FOR user 句が指定されている場合、このアカウント名には、セクション6.2.4「アカウント名の指定」で説明されている形式が使用されます。 例:

SET PASSWORD FOR 'bob'@'%.example.org' = 'auth_string';

アカウント名のホスト名部分は、省略すると'%'にデフォルト設定されます。

SET PASSWORD は、この文字列をクリアテキスト文字列として解釈し、アカウントに関連付けられた認証プラグインに渡して、プラグインによって返された結果を mysql.user システムテーブルのアカウント行に格納します。 (プラグインには、期待される暗号化形式に値をハッシュする機会が与えられます。 プラグインは、指定された値を使用できます。この場合、ハッシュは発生しません。)

(FOR 句を使用して) 名前付きアカウントのパスワードを設定するには、mysql システムスキーマに対する UPDATE 権限が必要です。 (FOR 句のない匿名以外のアカウントの場合) 自分のパスワードを設定する場合、特別な権限は必要ありません。

セカンダリパスワードを変更するステートメントには、次の権限が必要です:

  • 自分のアカウントに適用される SET PASSWORD ステートメントに RETAIN CURRENT PASSWORD 句を使用するには、APPLICATION_PASSWORD_ADMIN 権限が必要です。 ほとんどのユーザーは 1 つのパスワードのみを必要とするため、自分のセカンダリパスワードを操作するには権限が必要です。

  • アカウントがすべてのアカウントのセカンダリパスワードの操作を許可される場合は、APPLICATION_PASSWORD_ADMIN ではなく CREATE USER 権限を付与する必要があります。

read_only システム変数が有効になっている場合、SET PASSWORD には、他の必要な権限に加えて、CONNECTION_ADMIN 権限 (または非推奨の SUPER 権限) が必要です。

パスワードと認証プラグインの設定の詳細は、セクション6.2.14「アカウントパスワードの割り当て」およびセクション6.2.17「プラガブル認証」を参照してください。


関連キーワード:  ステートメント, パスワード, CREATE, アカウント, PASSWORD, TABLE, DROP, auth, 管理, 変更