1

我正在使用 ASP.net 开发一个 Web 应用程序,在我的应用程序的登录页面中,我正在使用数据库中的值检查给定的用户名和密码,实际上我username的 is"Admin"passwordis"Password"但如果我给出"admin" as usernameand "password" as password,它会接受用户名和密码。

我希望密码应该区分大小写。当我通过互联网时,我得到了一些点,比如更改Collation.....CI(CaseInsensitive) to CS(Case Sensitive)我认为这是针对整个数据库的......我不喜欢为整个数据库设置这个,我喜欢只检查用户名和密码..

有没有可能,谁能帮帮我...

我想像

DataObject.Entities dataEntities=new DataObject.Entities();
DataObject.Users user=dataEntities.Users.Where(u=>u.UserName==UserName && u.Password==Password);

if(user != null)
// link to home page.
else
//login failed.
4

4 回答 4

3

尝试使用以下内容:

select username, password from users collate SQL_Latin1_General_Cp1_CS_AS

如评论中所述,您不应以纯文本形式存储密码。为什么不使用开箱即用的 sql 成员资格提供程序?

于 2012-04-21T17:23:17.537 回答
3

你为什么要在数据库中这样做?密码在数据库中不应为纯文本,出于安全原因应加密。查询出密码,然后解密并在应用程序中进行比较......

于 2012-04-21T17:25:45.553 回答
3

听起来你做错了什么可怕的事情。如果您对密码使用了不错的加密散列函数,那么这根本不是问题。

当您存储密码时,您应该对它们进行哈希处理并将哈希值保存到数据库 -而不是实际密码。

于 2012-04-21T17:26:02.357 回答
3

Xander 的回答解释了如何进行不区分大小写的比较。

但是,您真的不应该在数据库中存储明文密码。相反,存储密码的哈希值。SQL Server 提供了HashBytes辅助功能:

select HashBytes('SHA1', 'YourPassword');

有关更长的解释,请参见此答案

于 2012-04-21T17:27:08.143 回答