0

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 ) に設定されます。私たちはサーバーを制御していないので、この変数は変更しないでください。

注意。
同じタイトルの質問がたくさんあります。ただし、質問の文脈が異なるため、この質問を重複させないでください。私は主に、上記のコードに対するこの回答からインスピレーションを得ました...

4

1 に答える 1