0

ログインフォームで次のコードを使用します。しかし、それはケースを気にしません。管理者または管理者と同じように、またはユーザー名としての ADmin が実際のシステムが管理者である場合にシステムにログインできるかどうか。これらは私のコードです:

sql = "SELECT * FROM tblStaff WHERE Username = @User AND Password = @Pass"
 myCommand = New SqlCommand(sql, myConnection)
 myCommand.Parameters.AddWithValue("@User", txtUser.Text)
 myCommand.Parameters.AddWithValue("@Pass", txtPassword.Text)
 myCommand.ExecuteReader()

..........

助けてください。

4

2 に答える 2

2

一般的に次のことを行う必要があります。

a) 大文字と小文字を区別する方法でユーザー名を比較します- * センシティブな方法 - ユーザー名を持つユーザーは 1 人だけである必要がありますがadmin、スペルは異なります。大文字と小文字のみが異なるユーザー名を使用すると、他のユーザーが混乱し、実際の管理者が誰であるかを突き止めようとする可能性があります。

b)パスワードのハッシュ(できればソルトハッシュ) をバイナリ列に格納します。

そうは言っても、大文字と小文字を区別する比較を強制的に実行したい場合は、次のCOLLATEを使用してみてください。

SELECT * FROM tblStaff WHERE Username = @User AND Password = @Pass COLLATE Latin1_General_CS_AS

上記はパスワード比較に collat​​e 句のみを適用します (この場合、大文字と小文字を区別 (CS) とアクセントを区別 (AS) を強制しています) - ユーザー名の列にそれを複製する必要があります (推奨されません。( を参照してください) a) 上記)。

于 2011-07-04T09:30:16.787 に答える
1

大文字と小文字を区別しない場合は、次のようにします。

sql = "SELECT * FROM tblStaff WHERE UPPER(Username) = UPPER(@User) AND Password = @Pass

編集:

ユーザー名の大文字と小文字を区別せず、パスワードの大文字と小文字を区別する場合は、次のようにします。

SELECT * FROM Users WHERE Username = @User AND (Password = @Pass COLLATE Latin1_General_CS_AS)

ユーザー名とパスワードで大文字と小文字を区別する場合は、次のことを試してください。

SELECT * FROM Users WHERE (Username = @User COLLATE Latin1_General_CS_AS) AND (Password = @Pass COLLATE Latin1_General_CS_AS)
于 2011-07-04T15:30:28.137 に答える