如何使密码区分大小写

时间:2011-12-15 09:21:51

标签: sql-server vb.net

我有以下代码验证从SQL Server检索的用户ID和密码,但我希望验证密码区分大小写。

    Dim frm As New MarksEntryFrm
    Dim flag As Boolean
    flag = False
    cmd = New SqlCommand("Select a.Form,a.AcademicYear,b.SubjectID,b.UserID,b.Password,c.Term from StudentDetails.Programmes a, StudentDetails.Subjects b,RegistrationDetails.Registration c where b.SubjectID='" & cboSubjCode.SelectedItem & "' and b.UserID='" & txtUserName.Text & "' and b.Password='" & txtPassword.Text & "'", cn)
    dr1 = cmd.ExecuteReader
    ctr = ctr + 1
    If dr1.Read Then
        frm.Show()
        ctr = 0
        Me.Hide()
    ElseIf ctr < 3 Then
        MessageBox.Show("Incorrect Subject Code,User Name or Password. Please try again.", "Wrong data entered", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
    Else
        MsgBox("Unathorized access. Aborting...")
        Close()
    End If
    dr1.Close()

4 个答案:

答案 0 :(得分:4)

你为什么不哈希你的密码????现在是Thats Primitive ......

Case-sensitivityCollation property表设计器中的SQL Server列控制。

默认设置不区分大小写。

以下是两种解决方案:

  1. 在SQL Server表设计器中,修改“列属性”窗口中“密码”字段的“排序规则”属性,选中“Case Sensitive”复选框。

  2. 首先将数据库中的密码检索到变量中,然后将其与TextBoxPassword.Text进行比较。

  3. 您可以在此处查看示例:http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/2d805aaa-d7d8-4183-8a12-cb578df5d8d8

    希望这有帮助。

答案 1 :(得分:3)

字面回答您的问题,您可以将以下内容添加到您的密码比较中:

and b.Password='" & txtPassword.Text & "' collate Latin1_General_CS_AS"

但在进一步讨论之前,请继续阅读SQL注入(以及切换到参数化查询),以及有关人员密码发布的最新新闻报道(以及查找密码哈希)。 / p>


所以,稍微好一点就是:

cmd = New SqlCommand("Select a.Form,a.AcademicYear,b.SubjectID,b.UserID,b.Password,c.Term from StudentDetails.Programmes a, StudentDetails.Subjects b,RegistrationDetails.Registration c where b.SubjectID=@SubjectID and b.UserID=@UserID and b.Password=@Password collate Latin1_General_CS_AS", cn)
cmd.Parameters.AddWithValue("@Subject",txtSubject.Text)
cmd.Parameters.AddWithValue("@UserID",txtUserName.Text)
cmd.Parameters.AddWithValue("@Password",txtPassword.Text)

至少可以保护您免受SQL注入(虽然AddWithValue并非没有自己的问题)。

答案 2 :(得分:0)

  

我有以下代码验证从SQL检索的用户ID和密码   服务器,

你被严重忽视起诉。你甚至不应该在sql server中存储一个非散列密码。如果你从sql server中提取te密码哈希,你对标准sql排序规则的cae不敏感性没有任何问题。

你再次被粗暴忽视 - 你永远不应该将未经过处理的用户输入传递给sql字符串。这是现在通过专业标准的常见知识,而不是坚持它们意味着你完全有责任承担损害。

答案 3 :(得分:0)

使用您的SQL,如下所示:

在这种情况下,您需要使用COLLATE

cmd = New SqlCommand("Select a.Form,a.AcademicYear,b.SubjectID,b.UserID,b.Password,c.Term from StudentDetails.Programmes a, StudentDetails.Subjects b,RegistrationDetails.Registration c where b.SubjectID='" & cboSubjCode.SelectedItem & "' and b.UserID='" & txtUserName.Text & "' and b.Password='" & txtPassword.Text & "' COLLATE Latin1_General_BIN ", cn)