C# 通过SQL表进行用户身份验证
我正在尝试在我的应用程序中实现一些安全性。我有一个名为USER_AUTHORIZATION的表,其中包含将使用该应用程序的用户的有效单点登录ID的列表。格式为COMPANYNAME\111222333,存储在名为UNAME的字段中。我试图在访问应用程序时执行检查,查看当前登录的用户是否在valid users表中。如果他们的SSO不在表中,我想显示一条错误消息 看法 当前在“=”附近接收到错误语法。 指向行int count=intCommand223.ExecuteScalar 更新2:我已经玩弄了我的代码,但无论我做什么,建议的解决方案 int count=intCommand223.ExecuteScalar; 似乎不起作用。下面是我更新的控制器代码C# 通过SQL表进行用户身份验证,c#,sql,visual-studio-2012,C#,Sql,Visual Studio 2012,我正在尝试在我的应用程序中实现一些安全性。我有一个名为USER_AUTHORIZATION的表,其中包含将使用该应用程序的用户的有效单点登录ID的列表。格式为COMPANYNAME\111222333,存储在名为UNAME的字段中。我试图在访问应用程序时执行检查,查看当前登录的用户是否在valid users表中。如果他们的SSO不在表中,我想显示一条错误消息 看法 当前在“=”附近接收到错误语法。 指向行int count=intCommand223.ExecuteScalar 更新2:我已经
public ActionResult HolidayDateTable()
{
var whoareyoupeople = User.Identity.Name;
DateTime date = DateTime.Now;
string myerrorstring = "User " + whoareyoupeople + " attempted unauthorized access on " + date + ".";
string query = "SELECT COUNT(*) FROM USER_AUTHORIZATION WHERE UNAME == " + whoareyoupeople + ")";
SqlConnection conn = new SqlConnection("Data Source=SWDB10DSQL;Initial Catalog=BillingUI;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
conn.Open();
SqlCommand cmd = conn.CreateCommand();
{
cmd.CommandText = string.Format("SELECT COUNT(*) FROM USER_AUTHORIZATION WHERE UNAME == " + whoareyoupeople + ")");
int count = (int)cmd.ExecuteScalar();
if (count == 0)
{
return RedirectToAction("AccessDenied");
}
else
{
return View(db.HOLIDAY_DATE_TABLE);
}
}
}
更新3:问题在于我的查询字符串,而不是C代码。我必须去掉一个等号。现在我遇到的问题是
Incorrect syntax near '\601011308'.
指向int count=intcmd.ExecuteScalar
这是表UNAME字段中值的部分条目。它缺少前面的公司名称,即;公司名称\601011308。我认为count应该返回SSO与数据库的匹配量,即;如果登录用户SSO为601011308,并且该用户是存储在表中的应用程序的有效用户,则count应返回1
更新3中出现上述问题的最新控制器代码:
public ActionResult HolidayDateTable()
{
var whoareyoupeople = User.Identity.Name;
DateTime date = DateTime.Now;
string myerrorstring = "User " + whoareyoupeople + " attempted unauthorized access on " + date + ".";
SqlConnection conn = new SqlConnection("Data Source=SWDB10DSQL;Initial Catalog=BillingUI;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
conn.Open();
SqlCommand cmd = conn.CreateCommand();
{
cmd.CommandText = string.Format("SELECT COUNT(*) FROM AUTHORIZED_USERS WHERE UNAME = " + whoareyoupeople + ")");
int count = (int)cmd.ExecuteScalar();
if (count == 0)
{
return RedirectToAction("AccessDenied");
}
else
{
return View(db.HOLIDAY_DATE_TABLE);
}
}
}
使用ExecuteScalar代替ExecuteOnQuery,因为Count自然会返回一个整数
int count=intcmd.ExecuteScalar;实际上是我昨天刚刚实现的。然后在else/if语句中使用count。不要从视图调用数据库,而是在控制器中调用。视图中不应该有复杂的逻辑。是否使用ASP.NET MVC?如果是这样,那么这个逻辑就不属于你的观点。它属于控制器,也可能属于动作过滤器。你想从头开始构建它,而不是依赖内置的东西吗?为什么要使用u连接?
Incorrect syntax near '\601011308'.
public ActionResult HolidayDateTable()
{
var whoareyoupeople = User.Identity.Name;
DateTime date = DateTime.Now;
string myerrorstring = "User " + whoareyoupeople + " attempted unauthorized access on " + date + ".";
SqlConnection conn = new SqlConnection("Data Source=SWDB10DSQL;Initial Catalog=BillingUI;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
conn.Open();
SqlCommand cmd = conn.CreateCommand();
{
cmd.CommandText = string.Format("SELECT COUNT(*) FROM AUTHORIZED_USERS WHERE UNAME = " + whoareyoupeople + ")");
int count = (int)cmd.ExecuteScalar();
if (count == 0)
{
return RedirectToAction("AccessDenied");
}
else
{
return View(db.HOLIDAY_DATE_TABLE);
}
}
}