PRE 我使用SQLExpress存储信息。
我的应用中有一个非常基本的用户设置。我有一个只包含三个字段的登录表,分别是用户名,密码和安全级别。只有三个安全级别;高,中,低。
在我的登录表单上,我有以下代码来保存登录Settings.Default[]
的用户,以便稍后阅读。
private void Loginbtn_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=MySupportHub;Integrated Security=True");
SqlDataAdapter sda = new SqlDataAdapter(@"SELECT * FROM [dbo].[Login] Where Username='" + usernameTextBox.Text + "' and Password='" + passwordTextBox.Text + "'", con);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows.Count == 1)
{
Settings.Default["CurrentUserName"] = usernameTextBox.Text;
Settings.Default.Save();
this.Hide();
Home home = new Home();
home.Show();
}
else
{
MessageBox.Show("Invalid Username and/or Password..!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Clearbtn_Click(sender, e);
}
}
然后在主页上,我有以下代码来获取值并在底部状态栏中显示当前登录用户。在页面加载。
//Identify and display current logged in user
CurrentUser.Caption = Settings.Default["CurrentUserName"].ToString();
我现在想要做的是检查当前登录用户的安全级别(用户值将存储在此处" CurrentUser.Caption
"在主表单上)并且能够禁用创建新用户等功能。
所以我需要能够读取CurrentUser.Caption
值,检查(SQL Express)[dbo]。[Login]表并查找用户的安全级别和限制功能结果。
任何帮助都将不胜感激。
由于
菲尔
答案 0 :(得分:1)
您实际上是在WebForms中实现用户身份验证和授权。
如果用户为用户名和密码键入以下字符串(不带引号),您的方案会发生什么:" foo OR 1 = 1" ?您绝不能在数据库CRUID操作中连接字符串以防止SQL注入。
我可以建议您使用包含用户角色的FormsAuthentication和加密票证,而不是以纯文本或甚至加密存储密码,而是使用PBKDF2和加密盐存储哈希值。但您可能不关心生产环境,这可能只是一个学习的例子。在这种情况下,您仍然不想练习在现实世界的应用程序中永远不会使用的内容,即将用户控件的值与存储在表中的权限相匹配。可以在客户端(浏览器)更改值并欺骗系统。
掌握FormsAuthentication并使用User.Identity.IsInRole
是一种继续进行的方式,您可以在Microsoft Docs教程之一上进行检查:https://support.microsoft.com/en-us/help/301240/how-to-implement-forms-based-authentication-in-your-asp.net-applicatio
我认为您希望获得行业有效的技能,以便在asp.net Web环境中实现身份验证和授权。如果这是你的问题背后的目标,你可能需要花时间学习所有这些,同时你需要学习asp.net身份,它可以为你处理很多事情。
在任何一种情况下,您都需要花费很长时间来开发应用程序而不使用实体框架,除非您使用Identity,否则您必须大力实施自己的安全功能,尤其是高质量的安全功能。相信我,我一直在那里,做到了。
将会有一个学习曲线,但最好的方法是使用EF来节省大量的时间,也可以使用ASP.NET Identity来获得当今相关的技能,同时也可以节省大量的时间。值得比较Web Forms和MVC,MVC是动态全功能现代应用程序的更好选择。
我希望你的问题有一个更简单的答案,但是你想要的方式解决这个问题将来不会对你有所帮助,也不会用在真正的应用程序中。
答案是主观的,但在我看来,你可以重新开始使用MVC,EF和身份,它会花费你同时学习正确的方法去做你现在想做的事,但它会给您将来可以在生产环境中使用的技能,以及不仅限于ASP.NET的概念。走学习曲线。
答案 1 :(得分:0)
您在寻找
吗?SELECT CURRENT_USER;
或
SELECT SUSER_NAME();
并查看您的表记录?