MySQLは5.7からrootパスワードがデフォルトで設定されていたりと、なにかと面倒な仕様変更が多いのですが、その流れで今回困ったことがあったのでご紹介したいと思います。
とりあえず、開発用のテスト環境としてセットアップをしたサーバーにMySQL5.7をセットアップし、エディタからSQLサーバーへアクセスできるようにするために、いつも通り外部からのアクセスが可能なユーザーを作成しようとしたのですが…
-- 実際にはもっと予想されにくい認証情報を指定しています。
GRANT ALL PRIVILEGES ON DBNAME.* TO user@'%' IDENTIFIED BY 'PASSWD123' WITH GRANT OPTION;
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
…はいでました、ポリシー違反(汗
MySQL5.6あたりまでは平気で設定できていたパスワードも、ものによっては5.7以降になると単純すぎるとはじかれます。
本番環境であれば十分に複雑で、かつ大文字や記号が入っているパスワードがベストなのはわかっていますが、開発中は手動で何度も接続しないといけない場合があるため、複雑なパスワードにしてしまうとちょっと困ります。(もちろんオフィス以外から接続できないようにするなどの別の対策はとってます。)
なんとか緩いパスワードを設定したいと探したところ、SQL上でパスワードポリシーを変更する方法を見つけました。
MySQLのシェルに入った状態で、次のSQL文を入力します。
-- パスワードの最低文字数を4文字に変更
SET GLOBAL validate_password_length=4;
-- 要求するポリシーレベルを"LOW"に変更
SET GLOBAL validate_password_policy=LOW;
これで再度
GRANT ALL PRIVILEGES ON DBNAME.* TO user@'%' IDENTIFIED BY 'PASSWD123' WITH GRANT OPTION;
を実行してみると…
Query OK, 0 rows affected (0.00 sec)
無事成功しました。
MySQL 5.7から結構あちこち変更されているので、今までのノリで触っていると戸惑ってしまうような変更が結構ありますが、その仕様変更に当たっても、焦らずに一つ一つ解決していきたいですね。