使用Active Directory凭据连接到SQL Server

时间:2013-04-22 20:46:34

标签: asp.net sql active-directory

我认为这很简单,但我似乎无法弄明白。我想要一个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,到目前为止没有问题)。

提前致谢!

2 个答案:

答案 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。