久しぶりにDTIからレンタルしているVPSにてyum updateしたあとに、MariaDBに接続しようと思ったら接続ができなかった。
Server is running in –secure-auth mode, but ‘root’@’localhost’ has a password in the old format; please change the password to the new format
サーバは「–secure_auth」モードで動いてるけど、ログインしようとしている「root@localhost」は古いフォーマットのパスワードを利用してるよ!パスワードを新しいフォーマットに変えてごらん、ほら♪
というメッセージです。
同じ状況に遭遇するであろう方のために原因と解決方法を書きたいと思います。
原因
原因は、MariaDB 10.1.6まではデフォルト無効であった「secure_auth」オプションがMariaDB 10.1.7以降でデフォルト有効になったため、今までold_password形式で利用していたアカウントからのログインを拒否するようになったためです。
参考:MariaDB:Server System Variables
解決方法
その1
MariaDBの起動オプションに「skip-secure-auth」を追加してMariaDBを再起動する。
そうすると、今まで通りMariaDBにアクセスできるようになる。
追加する先は「 [mysqld] 」配下。
まぁ、MariaDBの設定で「bind-address=127.0.0.1」にしているし、
iptablesでも3306ポートは閉じているからこの運用~ でもまったく問題ないような気がする。
その2
上記その1の対策では物足りない方へ、「secure_auth」を有効にした状態で正しく利用するための方法。
手順1:解決方法その1を利用して、とりあえずMariaDBにアクセスできるようにする。
手順2:以下のコマンドを実行し、root(もしくはログイン出来なくなっているユーザ)のパスワードを更新する。
ariaDB [mysql]> UPDATE mysql.user SET Password=PASSWORD('現在のパスワード') WHERE User="ユーザー名";
以下実行例:
ariaDB [mysql]> UPDATE mysql.user SET Password=PASSWORD('MyPassw0rd') WHERE User="root";
手順3:手順1での「解決方法その1」の設定変更をロールバックし、MariaDBを再起動
手順4:mysql -u root -p で接続できることを確認
もう少しエンジニアらしい動きをしてみたい方は、以下のコマンドを用いてパスワード変更前と変更後にどのように変化しているかを見れるといいですね。
MariaDB [mysql]> select User,Password from mysql.user where User="root";
以上です。
コメント