2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLに「古いスタイルのパスワードはサポートしてないよ」って怒られたら

Posted at

普段は専らフロントエンド周辺の制作/開発を行っているのだけれど、
ここ数日〜1週間くらい、rubyおよびMySQLと格闘している。ただの趣味。

MySQLに接続できない

ruby-mysql(2.9.12) を使って、MySQL (5.1.69) に接続しようとして失敗する。
以下のログを確認。

/usr/local/lib/ruby/gems/2.0.0/gems/ruby-mysql-2.9.12/lib/mysql/protocol.rb:192:in `authenticate': The old style password is not supported (Mysql::ProtocolError)

パスワード方式が古い

Google先生に質問したところ、MySQLではバージョンアップでパスワードの方式が変更されていて、5系では 4.1以前の方式のパスワードをサポートしなくなったということらしい。
詳しいことはよく分からんが、要するにパスワードを新しい方式で書き換える必要があるということのようだ。

この問題に関連しそうな点で、ローカルとリモートサーバ上の環境はだいたい同じなのだけど、リモートにアップした時にこの問題に遭遇した。そこで、mysqlデータベース内に保存されているパスワードを確認してみた。
「mysql」データベース>「user」テーブル>「Password」カラム
すると、どちらも同じパスワードを設定しているはずなのに、保存されている値(暗号化されたあとの値)が異なっている。

なんで違っているのか

推測だけど、ローカルのはターミナル上からSQL文を手打ちしてユーザーを作成、パスワード設定したのに対し、
リモート上のはクライアントソフト(Sequel Pro)からユーザー作成、パスワード設定したため、そのときの設定がまずかったのだろうと思う。

パスワードを書き換える

当該ユーザーで問題のリモートサーバーのMySQLにログインして、以下のクエリを投げてやる。

SET SESSION old_passwords=0;
SET PASSWORD=PASSWORD('YOURDATABASEPASSWORD'); 

後で、「mysql」データベースの「user」テーブルを確認したところ、
「Password」カラムが確かに書き変わっているのが確認できた。(ローカルと同じになった)

このあと、先ほどのエラーは吐き出されなくなり、接続に成功した。


MySQLのパスワード方式が変更されたことがどういうことなのかとか、そういう原理的なことは理解してないが、解消策として書き残しておく。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?