2012-07-17 71 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); 

另一種辦法是改變你的數據庫的排序規則進行區分大小寫的搜索,但要小心,因爲這可能會導致越來越少的結果在其他查詢或存儲過程比預期的。