使用Active Directory凭据连接到SQL Server

问题描述:

我认为这很简单,但我似乎无法弄清楚。我想要一个C#表单询问用户名和密码。我想通过询问SQL是否可以登录到SQL数据库来验证用户。我已经尝试了一种基本的方法,只是将用户名和密码放在连接字符串中,但那不起作用,我收到一条错误消息“用户某某无法访问”我是假设是因为密码没有正确传递。这是我有:使用Active Directory凭据连接到SQL Server

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作为这些帐户,至今没有任何问题)。

在此先感谢!

您错误地理解了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服务器来认证用户ID “XXXX” 作为SQL Server登录。

这样做不是为SQL Server提供域用户“xxxx”以进行身份​​验证。即使使用格式“Domain \ xxxx”也不行。你不能。

+0

谢谢。我想选项2已经不存在了,(我正在尝试'domain \ xxxx')。我最初尝试了选项一,但从sql中获得错误消息“登录失败。登录来自不受信任的域,不能与Windows身份验证一起使用。”我不认为它使用我的表单用户名/密码。我如何告诉它明确使用我在表单中输入的用户名/密码(哪些是广告凭证)? – russds 2013-04-22 21:54:14

传递活动目录ID的用户名密码是不可能的。它始终使用运行该网站的应用程序池的Id。