我认为这很简单,但我似乎无法弄明白。我想要一个c#表单,询问用户名和密码。我想通过询问SQL是否该用户帐户可以登录到SQL数据库来验证用户。我尝试了一种基本的方法,只是将用户名和密码放在连接字符串中,但是没有用,我得到一条错误消息“用户某某某某人没有访问权限”我是假设因为密码没有正确携带。这就是我所拥有的:
的Web.config:
<connectionStrings>
<add name="connectionname"
connectionString="Data Source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<identity impersonate="true" />
....
我的代码背后:
try
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=myserver;Initial Catalog=mydb;User ID=" + useridTextBox.Text + ";Password=" + passwordTextBox.Text;
con.Open();
con.Close();
//successful login
validDBLogin = true;
pageMsg.Text = "Successful AD and DB login";
}
catch (Exception err) //if error Opening, catch the error, and display
{
pageMsg.Text = "No access to the Database";
pageMsgAdditional.Text = err.Message.ToString();
validDBLogin = false;
}
必须有办法做到这一点?我的目标是使用SQL完成身份验证。如果用户想要访问,我给他们访问数据库,这就是我所要做的。我也希望以这种方式集成安全性,以便我可以跟踪哪个用户运行了哪个sql查询。 (不确定它是否有所作为,但我们正在为这些帐户使用Active Directory,到目前为止没有问题)。
提前致谢!
答案 0 :(得分:2)
您误解了SQL Server中的SSPI集成。
连接字符串1(SSPI):
Data Source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;
这告诉SQL Server检查拥有正在尝试连接的进程的用户的凭据。在这种情况下,ASP.Net应用程序池标识是“Active Directory用户”的上下文。
连接字符串2(用户/密码):
Data Source=myserver;Initial Catalog=mydb;User ID=xxxx;Password=yyyy;
这告诉SQL Server将用户ID“xxxx”验证为SQL Server登录。
不为SQL Server提供域用户“xxxx”进行身份验证。即使您使用“Domain \ xxxx”格式也不行。你不能。
答案 1 :(得分:1)
无法传递活动目录ID的用户名密码。它始终使用运行网站的应用程序池的ID。