コピペコードで快適生活

明日使えるソースを自分のために

MySQLのnative_passwordとold_password

ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled) - コピペコードで快適生活 の続き

パスワードの設定

# ユーザ作成時に設定する
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';

# ハッシュ化パスワードを直指定して作る
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY PASSWORD '*90E462C37378CED12064BB3388827D2BA3A9B689';

# パスワードを変更する
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');

# ハッシュ化パスワードを指定して変更する
# GRANT USAGEを使うことで、現在の権限設定に影響なく変更が行える。
GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY PASSWORD '*90E462C37378CED12064BB3388827D2BA3A9B689';
  • パスワードのハッシュ化フォーマットは、システム変数old_passwordsの値で決まる。
    • ONであれば、old_password
    • OFFであれば、native_password

ハッシュ化パスワードの確認

# old_passwordが無効になっている
mysql> SHOW VARIABLES WHERE Variable_name = "old_passwords";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| old_passwords | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

# このセッションでだけ有効にするには
# SET old_passwords = 1;

# デフォの値はmy.cnfで設定できる
# old_passwords=1

# native_passwordのハッシュ化パスワード
mysql> SELECT PASSWORD('hogehoge') as pass;
+-------------------------------------------+
| pass                                      |
+-------------------------------------------+
| *0B025000DCF68B1D374153A7005639E320D41D5B |
+-------------------------------------------+
1 row in set (0.00 sec)

# old_passwordのハッシュ化パスワード
# OLD_PASSWORD()を使うことで、old_passwords=OFFの場合でも、old_passwordのハッシュ化ができる。
mysql> SELECT OLD_PASSWORD('hogehoge') as pass;
+------------------+
| pass             |
+------------------+
| 0b9eb44c024ed960 |
+------------------+
1 row in set (0.00 sec)

参考