c# - 检查用户名和密码的类型是用于客户端还是管理员

标签 c# sql database

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

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

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”值表示管理员,“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

关于c# - 检查用户名和密码的类型是用于客户端还是管理员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36741415/

相关文章:

c# - 使用 'X' 按钮或 ESC 键关闭 WPF 窗口时的确认

database - 我可以在没有数据源的情况下配置 Grails 吗?

database - 这属于数据库还是代码?

android - 如何在android中显示数据库表的最后三行?

c# - 查找 Firebird 数据库中作为主键的所有列名

C# 编译器错误 : Cannot convert lambda expression

c# - 如何让 String.Format 不解析 {0}

sql - 消息 8115,级别 16,状态 2,第 2 行算术溢出错误将表达式转换为数据类型 int

sql - 在 SQL 中将一个值除以其平均值

MySQL 完整分组依据