检查用户名和密码是否适用于客户端或管理员

时间:2016-04-20 10:46:29

标签: c# sql database

我刚刚使用SQL在C#中完成了一个数据库。在我的数据库中,我在为一个人创建帐户时添加数据。我添加了用户名,密码,名字和姓氏以及类型(客户端或管理员)。

当我登录时,我所做的就是检查用户名和密码是否正确。这是代码。

private void button1_Click(object sender, EventArgs e)
    {
        con = new SqlConnection(@"Data Source=MARIA-PC;Initial Catalog=Account;Integrated Security=True");
        SqlCommand cmd1 = new SqlCommand("SELECT * FROM [dbo].[Cont] WHERE Username = @Username and Password = @Password;", con);
        cmd1.Parameters.AddWithValue("@Username", this.Username.Text);
        cmd1.Parameters.AddWithValue("@Password", this.Password.Text);
        cmd1.Connection = con;
        con.Open();

        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(cmd1);
        da.Fill(ds);
        con.Close();

        bool loginSuccessful = ((ds.Tables.Count > 0) && (ds.Tables[0].Rows.Count > 0));

        if (loginSuccessful )
        {
                MessageBox.Show("You logged in successfully!","Success!");
                this.Visible = false;
                f3.ShowDialog();
                this.Visible = true;
        }
        else
        {
            MessageBox.Show("Invalid username or password!", "Error!");
        }

    }

接下来我要做的是检查此用户名和密码是否适用于客户端或管理员。如果管理员要在表单中输入,或者是否要客户以另一种形式输入。

我该怎么办?我需要一些想法。

这是表格: enter image description here

1 个答案:

答案 0 :(得分:1)

您正在从数据库表中检索完整行,因此您还检索了包含usertype的列。您只需在验证登录后进行检查

这里有一个假设a" 1"值意味着管理员," 2"表示普通用户(当然您可以将这些常量更改为实际值)

   if (loginSuccessful )
   {
       string userType = ds.Tables[0].Rows[0]["Type"].ToString();
       if(userType == "1")
       {
           // User is an administrator, go to admin form
       }
       else if(userType == "2") 
       {
           // User is a normal user, go to user form
       }
       else
       {
           // Unexpected value, error message?
       } 
   }

附注,在使用参数时,数据库/代码逻辑中仍存在安全问题。您似乎将密码存储为纯文本。这可以让任何查看数据库表的人知道您的用户密码。密码绝不应以纯文本格式存储。该网站包含许多关于如何在数据库中正确存储密码的答案

从这里开始:

Best way to store passwords in a database