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
句が指定されている場合、このアカウント名には、セクション6.2.3「アカウント名の指定」で説明されている形式が使用されます。user
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 を参照してください。)