簡體   English   中英

向SQL Server發送身份驗證信息無效(C#)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM