Sql 区分大小写
Posted
技术标签:
【中文标题】Sql 区分大小写【英文标题】:Sql Case Sensitivity 【发布时间】:2012-04-21 17:17:13 【问题描述】:我正在使用 ASP.net 开发一个 Web 应用程序,在我的应用程序的登录页面中,我正在使用数据库中的值检查给定的用户名和密码,实际上我的 username
是 "Admin"
和 password
是 @987654325 @ 但如果我给"admin" as username
和"password" as password
,它会接受用户名和密码。
我希望密码应该区分大小写。当我浏览互联网时,我得到了一些要点,例如更改 CI(CaseInsensitive) to CS(Case Sensitive)
的 Collation
属性.....我认为这是针对整个数据库的....我不喜欢为整个数据库设置这个,我喜欢只检查用户名和密码..
可以吗,谁能帮帮我...
我在尝试
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.
【问题讨论】:
我可以理解密码区分大小写,但为什么要使用用户名?另外,给我们看一些代码。 您使用的是哪个 RDBMS...SQL Server? 感谢 Kritian Antonsen 的回复,正如你所说,用户名不需要区分大小写,但我需要检查密码,请检查我更新的问题 @Shanish 不要盲目使用 Xander 的解决方案。它根本不安全。我建议你在继续之前阅读How to safely store passwords。 感谢 Kristian 的友好回复,我会检查一下 【参考方案1】:听起来你做错了什么。如果您对密码使用了不错的加密散列函数,这根本不是问题。
当您存储密码时,您应该对它们进行哈希处理并将哈希值保存到数据库中 - 不是实际密码。
【讨论】:
感谢 Kristian 对 Sql 和编程不太熟悉,我不知道哈希是什么,实际上是从用户那里获取密码,例如员工,他在为他创建帐户时给出了他想要的密码,用那个密码和他的staffId他可以登录到应用程序.....我想我需要参考哈希函数【参考方案2】:尝试使用以下内容:
select username, password from users collate SQL_Latin1_General_Cp1_CS_AS
如 cmets 中所述,您不应以纯文本形式存储密码。为什么不使用开箱即用的 sql 成员资格提供程序?
【讨论】:
-1。你在这里没有解决真正的问题——他正在存储他的密码明文,这是在伤害他。 教他如何推出自己的会员提供商不是我的责任。此答案将执行区分大小写的查询。 没有什么是你的责任,但你根本没有帮助,你在欺骗他。 +1 这实际上回答了这个问题。 OP 可能无权更改他的数据库存储密码的方式。 @Andomar 有时,解决问题的最佳方法不是解决问题,而是首先避免问题。这是其中一种情况。【参考方案3】:你为什么要在数据库中这样做?密码在数据库中不应为纯文本,出于安全原因应加密。查询出密码,然后在应用程序中进行解密和比较...
【讨论】:
解密?密码应该是散列的,not 使用双向加密进行加密。如果您的数据库受到威胁,您的应用程序很可能也会受到威胁。 检查我更新的问题,如何加密、解密或散列密码【参考方案4】:Xander 的回答解释了如何进行不区分大小写的比较。
但是,您确实不应该在数据库中存储明文密码。相反,存储密码的哈希值。 SQL Server 提供了HashBytes
函数来帮助解决这个问题:
select HashBytes('SHA1', 'YourPassword');
请参阅this answer 以获得更详细的说明。
【讨论】:
散列是正确的方法,但SHA1 is outdated.以上是关于Sql 区分大小写的主要内容,如果未能解决你的问题,请参考以下文章