Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


13.7.1.7 SET PASSWORD 構文

SET PASSWORD [FOR user] =
    {
        PASSWORD('cleartext password')
      | OLD_PASSWORD('cleartext password')
      | 'encrypted password'
    }

SET PASSWORD ステートメントは、MySQL ユーザーアカウントにパスワードを割り当てます。

  • FOR user 句を指定しない場合、このステートメントは、現在のユーザーのパスワードを設定します。

    SET PASSWORD = PASSWORD('cleartext password');
    

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

    SELECT CURRENT_USER();
    
  • FOR user 句を指定した場合、このステートメントは、指定されたアカウントのパスワードを設定します。ただし、そのアカウントが存在する必要があります。

    SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('cleartext password');
    

    この場合は、mysql データベースに対する UPDATE 権限が必要です。

read_only システム変数が有効になっている場合、SET PASSWORD には、ほかのすべての必要な権限に加えて SUPER 権限が必要です。

FOR user 句が指定されている場合、このアカウント名には、セクション6.2.3「アカウント名の指定」で説明されている形式が使用されます。user 値は、'user_name'@'host_name' として指定するようにしてください。ここで、'user_name''host_name' は、そのアカウントの mysql.user テーブル行の User および Host カラムにリストされている内容とまったく同じです。(ユーザー名のみを指定した場合は、'%' のホスト名が使用されます。) たとえば、'bob''%.example.org'User および Host カラム値を使用してアカウントのパスワードを設定するには、このステートメントを次のように記述します。

SET PASSWORD FOR 'bob'@'%.example.org' = PASSWORD('cleartext password');

パスワードは、次の方法で指定できます。

  • PASSWORD() 関数を使用して

    この関数の引数は、平文 (暗号化されていない) パスワードです。PASSWORD() はパスワードをハッシュし、暗号化されたパスワード文字列を返します。

    old_passwords システム変数値により、PASSWORD() によって使用されるハッシュ方式が決定されます。SET PASSWORD がパスワードを正しい形式でないとして拒否した場合は、ハッシュ方式を変更するために old_passwords を変更することが必要になる可能性があります。たとえば、そのアカウントが mysql_native_password プラグインを使用している場合、old_passwords 値は 0 である必要があります。

    SET old_passwords = 0;
    SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');
    

    old_passwords 値が認証プラグインに必要な値と異なる場合は、PASSWORD() によって返されたハッシュされたパスワード値がそのプラグインに許容されず、パスワードを設定しようとするとエラーが生成されます。例:

    mysql> SET old_passwords = 1;
    mysql> SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');
    ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number
    
  • OLD_PASSWORD() 関数を使用して:

    この関数の引数は、平文 (暗号化されていない) パスワードです。OLD_PASSWORD() は 4.1 より前のハッシュを使用してパスワードをハッシュし、暗号化されたパスワード文字列を返します。このハッシュ方式は、mysql_old_password 認証プラグインを使用するアカウントにのみ適しています。

  • すでに暗号化されたパスワード文字列を使用して

    このパスワードは、文字列リテラルとして指定されます。これは、このアカウントに使用されている認証方法に必要なハッシュ形式の、すでに暗号化されたパスワード値を表している必要があります。

次の表は、old_passwords の許可される値、それぞれの値に対するパスワードハッシュ方式、およびそれぞれの方式でハッシュされたパスワードを使用する認証プラグインを示します。これらの値は MySQL 5.6.6 以降で許可されます。5.6.6 より前では、許可される値は 0 (または OFF) および 1 (または ON) です。

パスワードハッシュ方式 関連付けられた認証プラグイン
0 MySQL 4.1 ネイティブハッシュ mysql_native_password
1 4.1 以前の (古い) ハッシュ mysql_old_password
2 SHA-256 ハッシュ sha256_password

パスワードの設定の詳細は、セクション6.3.5「アカウントパスワードの割り当て」を参照してください。

重要

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

注意

4.1 より前のクライアントプログラムを使用して MySQL 4.1 以降のサーバーに接続している場合は、パスワードを変更する前に、必ずセクション6.1.2.4「MySQL でのパスワードハッシュ」を読んでください。デフォルトのパスワードハッシュ形式が MySQL 4.1 で変更されたため、パスワードを変更すると、そのパスワードが 4.1 より前のクライアントが生成できないハッシュ形式を使用して格納され、それにより、あとでサーバーに接続できなくなる可能性があります。

MySQL レプリケーションを使用している場合は、現在、CHANGE MASTER TO ステートメントの一部としてレプリケーションスレーブで使用されるパスワードは、実質的に長さが 32 文字に制限されます。パスワードがこれより長い場合、超過した文字はすべて切り捨てられます。これは、一般に MySQL Server によって適用される制限のためではなく、どちらかというと、MySQL レプリケーションに固有の問題です。(詳細は、Bug #43439 を参照してください。)


User Comments
Sign Up Login You must be logged in to post a comment.