【问题标题】:How to make Password column in Sql Server 2008 case sensitive?如何使 Sql Server 2008 中的密码列区分大小写?
【发布时间】:2014-05-26 23:35:19
【问题描述】:

在登录窗口中,如果密码不匹配,则必须显示错误。 我已经完成了所有编码,但问题出在 Sql Server 密码列中,它不区分大小写,我不知道如何实现。

如果用户有密码abc09Fd,并且他输入了ABC09fD 格式的密码,SQL Server 会让他登录。如何解决这个问题。

我的表架构是

创建表用户
(
UserId int 身份约束 PK_UserID 主键,
RoleId int 约束 FK_Role_Users_RoleID 外键引用 Roles(RoleId),
用户名 nvarchar(256) 非空约束 U_Users_Username 唯一,
密码 nvarchar(256) 不为空
)

【问题讨论】:

  • 查询是什么样的?我猜代码或查询本身在查询执行之前将凭据更改为小写。
  • 一个有两个参数@username@password的存储过程
  • 你真的不应该存储密码。看看存储密码的校验和。
  • 或许使用hashbytes
  • 得到了一个解决方案,因为 sql server 不区分大小写 uing collat​​e 有很大帮助 SELECT * FROM users WHERE Username=@username and Password = @password COLLATE SQL_Latin1_General_CP1_CS_AS

标签: sql sql-server sql-server-2008


【解决方案1】:

这就是排序规则可以发挥作用的地方。

正如其他人指出的那样,请注意存储密码
纯文本远非一个好主意。

SELECT [Password]
FROM [Users]
WHERE [Password] COLLATE Latin1_General_CS_AS = 'PaSSWord'

另见:

http://msdn.microsoft.com/en-us/library/ms144250.aspx

http://blog.sqlauthority.com/2007/04/30/case-sensitive-sql-query-search/

http://www.sqlservercentral.com/blogs/rocks/2012/01/09/revised-difference-between-collation-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as/

【讨论】:

  • 对不起兄弟已经得到答案,但感谢您的回复,毕竟msdn是大老板
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2011-03-12
  • 2012-05-13
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多