将 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() 与实体框架一起使用的主要内容,如果未能解决你的问题,请参考以下文章
实体框架/LINQ/SQL 与实体框架/LINQ/MYSQL
VS2013与MySql建立连接;您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧