old_passwords でエラー

MySQL Connector/NET を 6.5.4 から 6.6.x に変更したら、MySQL 5.1 のサーバーに接続時、以下のエラーが出るようになりました。

using MySql.Data.MySqlClient;
・・・・・・
string connectionString = "Database=Test;Data Source=localhost;User Id=username;Password=pass";
MySqlTransaction cn = MySqlConnection(connectionString);
cn.Open(); // MySql.Data.MySqlClient.MySqlException が発生
// MySql.Data.MySqlClient.MySqlException のメッセージ

Authentication with old password no longer supported, use 4.1 style passwords


MySQL 4.x における古いパスワードは16文字で保存されますが、5.0以降の新しいパスワードは長さ41文字で保存するようになりました。MySQL Connector/NET 6.6.x 以降のバージョンはどうやら41文字のパスワードしかサポートしなくなったようで例外が発生しているようです。問題のサーバーに保存されてるパスワードは、4.x 時代のデータベースから移行したものなので、古い形式のパスワードが残ってて引っ掛かってたのですね。
そこで以下の様にパスワードを再設定し、パスワードの長さを41文字に変更したら MySqlConnection.Open() で接続できるようになりました。

set session old_passwords = 0;
set password for 'user'@'%' = password('password');