【问题标题】:Using MySQL PASSWORD() with Entity Framework将 MySQL PASSWORD() 与实体框架一起使用
【发布时间】:2014-12-23 17:31:35
【问题描述】:

我们有一个旧的 MySQL 数据库,它使用 MySQL 函数 PASSWORD() 存储密码。有没有办法在 C# 中使用实体框架来选择带有密码的行?

旧方法是执行 sql 查询

SELECT * FROM `employees` WHERE `id` = @id AND `password` = PASSWORD(@pword);

@id 和 @pword 然后作为参数传递给 .Net 连接器。

在实体中我们这样做

var query = from employeeRow in context.employees 
            where employeeRow.id.Equals(username_txt.Text) 
            select employeeRow; 
_foundEmployee = query.SingleOrDefault();

但这将返回行数据而不检查密码。如何检查已使用 MySQL PASSWORD() 散列的密码?

【问题讨论】:

  • PASSWORD()函数被MySQL Server中的认证系统使用;你应该在你自己的应用程序中使用它。”
  • 我同意 SNOWFLAKE,但目前我对此无能为力。我只需要在更新软件时使用我得到的东西。我最终将有机会更新数据库,届时我将切换到本地哈希方法。

标签: c# mysql entity-framework


【解决方案1】:
where employeeRow.id.Equals(username_txt.Text) && employeeRow.password.Equals(hashedPassword)

您需要单独进行密码散列。我怀疑 mysql 文档会告诉你 PASSWORD() 方法使用什么算法。

【讨论】:

  • 我同意我们应该单独进行密码散列。我正在更新这个旧软件,但在完全更新之前,我必须使用现有数据。它是使用 MySQL 内置的 PASSWORD 函数构建的,所以我现在必须使用它。我会看看我是否能找到他们在 MySQL 中使用的方法,看看我是否可以在我的代码中复制它。
  • stackoverflow.com/questions/868482/… 可能会对您有所帮助。从您的问题中,我了解到您不明白为什么它会在不检查密码的情况下返回整行-> 我向您展示了原因,所以我真的不明白反对票。
  • 那个链接很有帮助。这正是我想要的。我明白你的回答是在说什么。但是我不知道如何在不使用 MySQL 查询“SELECT PASSWORD('someString')”的情况下将用户输入到需要测试的哈希中来从 c# 转换为哈希。我在想有一种方法可以直接使用 Entity Framework 来完成,但是使用该链接中的信息散列本地会很好。
猜你喜欢
  • 2015-07-28
  • 2010-09-09
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多