2012-07-17 74 views
0

我如何写入查询大小写敏感的Linq到SQL。Linq到SQL查询密码字段区分大小写

目前我的查询是:

var userResults = from u in Adm.Registrations 
        where u.UserName == userName && u.Password == passWord 
        select u; 

感谢,

+8

抓取密码哈希,等什么?你有纯文本密码? – leppie 2012-07-17 06:03:51

+0

请注意,更改数据库的排序规则将确定您的查询是不区分大小写还是区分大小写。 – 2012-07-17 06:08:10

回答

4

永远,永远密码储存在一个数据库或其他地方的纯文本。决不。这不好。

http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html

我在这里的观点是不通过泥在 reddit的拖累开发商的好名字。我们都有罪。我敢肯定,每个开发者 都会在他们的 职业生涯中以某种形式存储密码。我知道我有。忘记责任。重要的是 告诉我们的同行,在数据库中存储明文密码是严格禁止的 --有一个更好的方法,从基本的 哈希开始。

使用这些参考资料可以帮助您确定最佳的行动方案。有多种方式来剥皮这只猫。我意识到改变你存储密码的方式并不是直接回答你原来的问题,而是需要你做更多的工作,但它会防止更多的麻烦。

这是一个非常彻底的指导解决您的纯文本的问题: http://www.codeproject.com/Articles/14537/The-Art-Science-of-Storing-Passwords

这些链接也被照亮: Salting Your Password: Best Practices?

Non-random salt for password hashes

我希望这是更有帮助的是刚刚起步警告。

+0

现在这不是一个真正的答案。通过提及例如,您可以轻松地将它变成一个。如何散列会使事情变得敏感。 – ThiefMaster 2012-07-18 07:11:51

+0

@ThiefMaster - 注册并更新。 – GrayFox374 2012-07-18 14:42:12

0

试试这个

var userResults = from u in Adm.Registrations 
         where u.UserName .Equals(userName,StringComparison.InvariantCultureIgnoreCase) && u.Password.Equals(passWord,InvariantCultureIgnoreCase) 
         select u; 
2

如果您还没有配置你的数据库进行区分大小写的比较,您将需要执行内存比较,从数据库中获取结果之后。

var users = Adm.Registrations 
       .Where(u => u.UserName == userName && u.Password == password) 
       .ToList() // this will load data into memory 
       // Now perform a case-sensitive query on the in-memory data 
       .Where(u => u.UserName == userName && u.Password == password); 

另一种办法是改变你的数据库的排序规则进行区分大小写的搜索,但要小心,因为这可能会导致越来越少的结果在其他查询或存储过程比预期的。