gpt4 book ai didi

c# - 哈希 MySql 密码给出 : "Authentication with old password no longer supported, use 4.1 style passwords"

转载 作者:行者123 更新时间:2023-11-29 12:11:07 29 4
gpt4 key购买 nike

我尝试从 ASP.NET (Razor) 网页连接到 MySql(版本 5.0.95)数据库...
(汇编MySql.Data.dll,v6.6.5.0)

首先,我尝试直接在连接字符串中直接指定密码,例如 "...;pwd=myClearPassword"。但是当尝试打开时出现错误

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

所以我现在尝试更新我的代码,如下所示:

@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;
}

但是我遇到了同样的错误。问题出在哪里?

附注。

在 SQL Server 上,old_passwords 变量设置为 ON(默认值为OFF)。我们不控制服务器,因此该变量应保持不变。

注意。
有很多相同标题的问题。但是,请不要将此问题重复,因为问题的上下文不同。我的灵感主要来自this answer对于上面的代码...

最佳答案

首先,介绍一下有关身份验证的一般情况;

开发应用程序时通常使用两种类型的身份验证:

数据库身份验证 - 这是应用程序验证数据库访问权限的方式

用户身份验证 - 这是用户向您的应用程序进行访问身份验证的方式

您上面链接到的文章正在讨论用户身份验证,而您的问题实际上是关于数据库身份验证。

MySQL 使用的原始哈希算法(4.1 之前)已被认为是不安全的。 4.1 版实现了新的哈希算法。连接字符串中的密码不需要进行哈希处理,哈希处理是在数据库身份验证期间在 .Net 连接器内部执行的(它已为您完成)。问题是,如果您已从 4.1 之前的版本升级了数据库,并且没有重置密码以使用新的哈希。

您可以执行以下两种操作之一来纠正这种情况。这些脚本在数据库中运行。

  1. 允许数据库接受旧式哈希运行

设置old_passwords=TRUE

  • 使用新哈希设置新密码
  • 设置old_passwords=FALSE

    SET PASSWORD=PASSWORD('your_new_password_here')

    建议使用第二种方法,并使用新的哈希算法,因为它使您的数据库访问更加安全。

    关于c# - 哈希 MySql 密码给出 : "Authentication with old password no longer supported, use 4.1 style passwords",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30671759/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com