[英]Sending authentication information to SQL Server isn't working (C#)
我已經問過一個與此問題類似的問題,但我已將其范圍縮小到我的問題,並且我已經在這個問題上工作了幾個小時,無法解決這個問題。
基本上,我有一個Visual Studio Wep應用程序,並且試圖使用登錄頁面和sql server數據庫來驗證用戶憑據。 用戶在登錄屏幕上輸入用戶名和密碼的字符串,然后在后面的代碼中將其發送到此處:
private bool ValidateUser(string userName, string passWord)
{
SqlConnection conn;
SqlCommand cmd;
string lookupPassword = null;
// Consult with your SQL Server administrator for an appropriate connection
// string to use to connect to your local SQL Server.
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["databaseConnect"].ConnectionString);
conn.Open();
// Create SqlCommand to select pwd field from users table given supplied userName.
cmd = new SqlCommand("Select Password from Users where User=@userName;", conn);
cmd.Parameters.Add("@userName", System.Data.SqlDbType.VarChar, 25);
cmd.Parameters["@userName"].Value = userName;
lookupPassword = (string)cmd.ExecuteScalar();
// If no password found, return false.
if (null == lookupPassword)
{
return false;
}
private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
(logs in)
}
該應用程序連接到數據庫中的一個表,該表當前包含一個測試項,如下所示: http : //i.imgur.com/YFOQYKm.jpg
但是,當我輸入“ test”作為用戶名並輸入“ password”作為密碼時,它不接受登錄。
我試圖只包括代碼的相關部分,以使任何想回答該問題的人都更加清楚,但是這里有一些關於我的問題的評論:
-當我將if(null == lookupPassword)設置為“ return true”而不是“ return false”時,應用程序允許登錄。 這意味着在“ lookupPassword =(string)cmd.ExecuteScalar();”之后,lookupPassword仍然為空。
-當我將if(ValidateUser(txtUserName.Value,txtUserPass.Value))更改為if(userName = test和passWord = password)時,應用程序運行正常。 因此,問題不在於登錄應用程序的實際行為,而在於沒有找到正確的SQL Server憑據。
-“ databaseConnect”正在應用程序的其他地方工作,所以這不是問題。
-當我提交登錄憑據時,應用程序沒有中斷,只是沒有接受它們是正確的。
從那開始,在我看來問題出在以下四行:
cmd = new SqlCommand("Select Password from Users where User=@userName;", conn);
cmd.Parameters.Add("@userName", System.Data.SqlDbType.VarChar, 25);
cmd.Parameters["@userName"].Value = userName;
lookupPassword = (string)cmd.ExecuteScalar();
有人知道我的問題可能出在哪里嗎? 我對編程非常陌生,因此請盡可能簡化答案。 預先感謝您的任何幫助。 :)
該表設計在SQL Server中使用了幾個保留字 。 如果無法修改此架構,則可以按以下方式更新查詢:
SELECT [Password] FROM [Users] WHERE [User] = @Username
話雖如此,以明文形式存儲密碼是一種可怕的安全做法。 永遠不要以加密或純文本形式存儲密碼,應該使用鹽對密碼進行哈希處理,以防止彩虹表破解您的密碼。 我會研究@Richard關於Rfc2898DeriveBytes
的建議。 您也可以在Google或Bing中搜索使用salt和SHA256。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.