【发布时间】:2015-06-08 22:20:39
【问题描述】:
我尝试从 ASP.NET (Razor) 网页连接到 MySql(版本 5.0.95)数据库...
(组装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)。我们不控制服务器,所以这个变量应该保持不变。
注意。
有很多同名的问题。但是,由于问题的上下文不同,请不要将此问题重复。上面代码的灵感主要来自this answer...
【问题讨论】:
-
您使用的是什么版本的 MySQL 以及您使用的是什么版本的 .Net 连接器?
-
嗨,@Kevin,我更新了 OP。
标签: c# mysql asp.net database-security