【发布时间】:2021-08-08 22:08:19
【问题描述】:
我有一个登录表,每个用户都有不同的角色,例如员工、管理员。
我可以让用户成功登录,他们的用户名显示在控制台应用程序的页面之间。
我正在尝试在用户名标签旁边添加一个新标签,因此登录后下一页将有类似这样的内容 Admin: Johny or Staff: Bob
我试图做的是将查询更改为:
"SELECT Role From User_Table WHERE eb_number='" + usernametxt.Text + "' and Password = '" + textBox1.Text + "'",con);
但这也不起作用。
private void loginbtn_Click(object sender, EventArgs e)
{
//GRANT ACCESS TO THE DATABASE WITH USERNAME AND PASSWORD WHICH IS STORED IN THE DATABASE.
SqlConnection con = new SqlConnection(conString);
con.Open();
if (con.State==System.Data.ConnectionState.Open)
{
SqlDataAdapter sda = new SqlDataAdapter("SELECT Count(*) From User_Table WHERE eb_number='" + usernametxt.Text + "' and Password = '" + textBox1.Text + "'",con);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
{
this.Hide();
Main ss = new Main(usernametxt.Text); //usernametxt is passed in to prevent error
ss.Show();
MessageBox.Show("Logged in sucessfully");
}
else
{
MessageBox.Show("Incorrect Username/Password Combination. Try Again");
}
}
}
Main.cs
public Main(string Username/*, string Role*/) //passing username values
{
InitializeComponent();
Username_lbl.Text = Username; //Displaying username
//Main_Role_lbl.Text = Role;
在那一刻,我的代码只允许我登录和退出阅读用户名和密码。我不确定我是否可以通过这种方式添加在 SQL 查询中搜索用户名的角色?我期望它的代码做的是像 Admin: Johny 或 Staff: Bob 这样的登录
【问题讨论】:
-
和调用SQL一样,检查结果看用户名/密码是否正确,直接调用另一条SQL获取角色即可。
-
关于您的代码的离题但必要的建议: - 在查询中使用参数而不是字符串连接。 - 不要将密码作为明文存储在数据库中,使用散列函数计算密码散列并保存。 - 始终处置您的连接对象。请对上述主题进行一些研究。
-
如果您在用户和角色表之间有某种关系会更容易,登录时您将获取用户的 ID(或每一列)并使其全局可用,如果获取result != null 这意味着您的用户存在并且您可以继续使用。之后,您有一个 ID,如果您需要知道用户的角色是什么,您只需从角色表中获取数据,其中 ID = 您的全局可用 ID。查询看起来像这样:“select * from Users where Username = @username and password = @password”和“select RoleName from Roles where UserID = @userID”
-
首先,使用参数化查询。想象一下what will happen,如果有人在
textBox1中输入'; drop table users;--。其次,不要编写自己的验证码。密码永远不会以明文形式存储或加密。它们被加盐,使用加密哈希算法进行至少 1000 次迭代,并且只存储哈希 -
有人也可以输入
' 1=1作为密码。或' or Role='Admin'.
标签: c# sql sql-server