[MySQL] パスワードを変更する - SET PASSWORD

MySQL上のユーザーのパスワードを変更するにはSET PASSWORD文を利用します。

SET PASSWORD FOR katsube@localhost = 'password here';

MySQLのバージョンによって記述方法が異なります(上記は5.7以降の書き方)。また同様のSQLでALTER USER文があり、こちらは有効期限などより細かい設定が可能です。

利用方法

MySQL 5.7以降

SET PASSWORD文の使い方は非常にシンプルで、以下のようにユーザーを指定しないとログイン中のユーザー自身のパスワードを変更します。

SET PASSWORD 'password here';

ログイン中の自分以外を変更したい場合は、FOR句を付けてその後に指定します。

SET PASSWORD FOR katsube@localhost = 'password here';

MySQL5.6以下

5.7以降とそれほど変わらないのですが、パスワードを指定する際にPASSWORD()関数を通す必要があります。

SET PASSWORD = PASSWORD('password here');
SET PASSWORD FOR 'katsube'@'localhost' = PASSWORD('password here');

5.7では非推奨(廃止予定)となっており、8.0ではドキュメントから姿を消しています。MySQLのバージョンアップを行う際にお気をつけください。

その他

旧パスワードを指定

MySQL8.0.13から、変更前と変更後のパスワードを同時に渡しよりセキュアに変更する文法が追加されています。

SET PASSWORD FOR katsube@localhost = 'new password'
REPLACE 'current password';

current passwordとある箇所に現在のパスワードを指定します。もし異なっていた場合はエラーとなり変更されません。

ALTER USERとの違い

SET PASSWORDと似たようなことができるSQLにALTER USER文があります。

ALTER USER katsube@localhost IDENTIFIED BY 'password here';

公式ドキュメントによると以下の通り、ユーザー情報とパスワードの変更を行う場合にALTER USER文を利用します。

Note Rather than using SET PASSWORD to assign passwords, ALTER USER is the preferred statement for account alterations, including assigning passwords.

13.7.1.10 SET PASSWORD Statement

関連

blog.katsubemakito.net

参考ページ