如何检查当前登录的用户安全级别,以便我可以禁用功能?

时间:2017-07-09 10:15:39

标签: c# sql-server security admin

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]表并查找用户的安全级别和限制功能结果。

任何帮助都将不胜感激。

由于

菲尔

2 个答案:

答案 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(); 

并查看您的表记录?