概要
- なんとなくコピペで使っていた、MySQLのユーザを作るときのコマンドの「IDENTIFIED BY」の箇所について
- 「PASSWORD」という文字列を付ける/付けないで挙動が変わるのを知らず、
- エラーに苦しんでいた
環境
- MySQL 5.5/5.6
実行したSQL
mysql> GRANT USAGE ON *.* TO 'arnold'@'%' IDENTIFIED BY PASSWORD 'dbpass';
エラー
- MySQL 5.6
ERROR 1827 (HY000): The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.
- MySQL 5.5
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number
原因
- 下記のMySQLドキュメントに書いてありました。
- ユーザのパスワードを設定する部分「IDENTIFIED BY PASSWORD」について、「PASSWORD」を付けると、パスワード文字列をハッシュ化した後の文字列を指定する。
- 「PASSWORD」を付けないと平文でのパスワード文字列を指定する。
MySQLのドキュメント
CREATE USER または GRANT では、
PASSWORD() でパスワードに返されるハッシュ値がわかっている場合に、
平文パスワードの送信を回避できます。
前にキーワード PASSWORD を付けたハッシュ値を指定します
おまけ
- パスワードのハッシュ化した文字列
mysql> SELECT PASSWORD('dbpass');
+-------------------------------------------+
| PASSWORD('dbpass') |
+-------------------------------------------+
| *9FB2126F7514B6AF42B20E9E4B8E839B72E31396 |
+-------------------------------------------+
1 row in set (0.00 sec)