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');