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 区分大小写的主要内容,如果未能解决你的问题,请参考以下文章

sql语句区分大小写吗

sql语句查询字母字段时不区分大小写

SQL不是不区分大小写吗

sql网络服务的编辑器怎么调出来

oracle的sql命令有没有区分大小写

Oracle查询语句区分大小写吗?