ASP.NET (Razor) Web ページから MySql (バージョン 5.0.95) データベースに接続しようとしています...
(Assembly MySql.Data.dll、v6.6.5.0)
まず、接続文字列に直接パスワードを直接指定してみました"...;pwd=myClearPassword"
. しかし、開こうとするとエラーが発生しました
「古いパスワードによる認証はサポートされなくなりました。4.1 スタイルのパスワードを使用してください。」
だから私は今、次のように自分のコードを更新しようとしています:
@using MySql.Data.MySqlClient
@using System.Security.Cryptography
private const string ConnectionStringFormat =
"server=xxx.xx.xxx.xx;database=mydbname;uid=username;pwd={0};";
private string GetHashedPassword(string clearPassword)
{
var hasher = new SHA256Managed();
var unhashedPassword = System.Text.Encoding.Unicode.GetBytes(clearPassword);
var hashedBytes = hasher.ComputeHash(unhashedPassword);
var hashedPassword = Convert.ToBase64String(hashedBytes);
return hashedPassword;
}
public Dictionary<int, string> GetIdStringCollectionFromTable(string tableName)
{
var hasehdPassword = GetHashedPassword("myClearPassword");
var connectionString = string.Format(ConnectionStringFormat, hasehdPassword);
MySqlConnection conn = new MySqlConnection(connectionString);
conn.Open(); // >>>>> ERROR !!!!!!!!
var sqlCommand = "select id, name from {0}".Fill(tableName);
MySqlCommand command = new MySqlCommand(sqlCommand, conn);
var reader = command.ExecuteReader();
Dictionary<int, string> list = new Dictionary<int, string>();
while (reader.Read())
{
int id = reader.GetInt32(0);
string text = reader.GetString(1);
list.Add(id, text);
}
return list;
}
ただし、同じエラーが発生します。問題はどこだ?
PS。
SQL サーバーでは、old_passwords
変数はON
(デフォルト値はOFF ) に設定されます。私たちはサーバーを制御していないので、この変数は変更しないでください。
注意。
同じタイトルの質問がたくさんあります。ただし、質問の文脈が異なるため、この質問を重複させないでください。私は主に、上記のコードに対するこの回答からインスピレーションを得ました...