比较sql server中同一个表中的两行

时间:2012-10-08 15:46:37

标签: c# sql database sql-server-2008

我看过类似的答案但是,这是我正在寻找的,因为我没有从以前回答的问题中找到任何答案:

这是我的方案:我有一个[res_user]的表username, password, key_pin,用于保存用户名,加密密码和4位数字的密钥或密钥。

我在C#中创建一个应用程序,允许管理员从应用程序本身登录并对数据库进行更改。

首先会提示管理员使用用户名,密码及其提供的key_pin登录。该引脚将加密和解密数据库的密码。

现在我有一个用户名[manager],加密密码已经保存在key_pin的数据库中。

如何确保登录的管理员是正确的,这意味着如何从C#app中比较数据库中的用户名和加密密码。

这些是我将在app中实现的步骤(在c#中使用SQL语法):

  1. 加密密码

  2. 使用登录用户名和

  3. 在数据库中获取已保存的加密
  4. 比较加密,将“是”或“否”返回给应用以进行访问控制。

  5. 允许5次尝试登录。

    这是我做的第一部分和第二部分:

    try
    {
       using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["STRING"].ConnectionString))
       {
         using (SqlCommand cmd = new SqlCommand("dbo.Res_User", con))
         {
           cmd.CommandText = "INSERT INTO Res_User(username, password, key_pin) SELECT '" + username + "' , dbo.fnEncDecRc4('" + pin + "','" + password + "'), '" + pin + "'";
           con.Open();
           cmd.ExecuteNonQuery();
    
           MessageBox.Show("Added", "Information", MessageBoxButtons.OK);
    
           cmd.CommandText = "SELECT password FROM Res_User WHERE username = @username";
           cmd.Parameters.AddWithValue("@username", username);
           cmd.ExecuteNonQuery();
    
           using (SqlDataReader reader = cmd.ExecuteReader())
           {
               if (reader.HasRows)
               {
                   while (reader.Read())
                   {
                        MessageBox.Show(reader["password"].ToString(), "Information", MessageBoxButtons.OK);
                   }
               }
           }
    

    我如何进行第三部分?

    只有有人可以帮助我比较保存的enc。密码和登录名。我在第一部分做过的密码。

    如果需要更多信息,请与我们联系。

    谢谢。

    任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以尝试在服务器上进行验证时重新加密服务器上的密码和密码。因此,您将调用加密函数,然后进行比较,如果有结果,则表示输入了正确的密码。修改你的代码,它看起来像:

try
{
   using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["STRING"].ConnectionString))
   {
     using (SqlCommand cmd = new SqlCommand("dbo.Res_User", con))
     {
       cmd.CommandText = "INSERT INTO Res_User(username, password, key_pin) SELECT '" + username + "' , dbo.fnEncDecRc4('" + pin + "','" + password + "'), '" + pin + "'";
       con.Open();
       cmd.ExecuteNonQuery();

       MessageBox.Show("Added", "Information", MessageBoxButtons.OK);

       cmd.CommandText = "SELECT password FROM Res_User WHERE username = @username AND key_pin = @pin AND password = dbo.fnEncDecRc4(@pin, @password)";
       cmd.Parameters.AddWithValue("@username", username);
       cmd.Parameters.AddWithValue("@pin", pin);
       cmd.Parameters.AddWithValue("@password", password);
       cmd.ExecuteNonQuery();

       using (SqlDataReader reader = cmd.ExecuteReader())
       {
           if (reader.HasRows)
           {
               //successfully validated.
           }
       }