将 MySQL PASSWORD() 与实体框架一起使用

Posted

技术标签:

【中文标题】将 MySQL PASSWORD() 与实体框架一起使用【英文标题】:Using MySQL PASSWORD() with Entity Framework 【发布时间】: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,但目前我对此无能为力。我只需要在更新软件时使用我得到的东西。我最终将有机会更新数据库,届时我将切换到本地哈希方法。 【参考方案1】:
where employeeRow.id.Equals(username_txt.Text) && employeeRow.password.Equals(hashedPassword)

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

【讨论】:

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

以上是关于将 MySQL PASSWORD() 与实体框架一起使用的主要内容,如果未能解决你的问题,请参考以下文章

无法将实体框架与 MySQL 一起使用

无法将 MySQL 连接用于实体框架 6

实体框架/LINQ/SQL 与实体框架/LINQ/MYSQL

实体框架 - SaveChanges 与事务

VS2013与MySql建立连接;您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧

使用实体框架将 MySql 数据传输到 Microsoft Sql