使用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”也不行。你不能。
答
传递活动目录ID的用户名密码是不可能的。它始终使用运行该网站的应用程序池的Id。
谢谢。我想选项2已经不存在了,(我正在尝试'domain \ xxxx')。我最初尝试了选项一,但从sql中获得错误消息“登录失败。登录来自不受信任的域,不能与Windows身份验证一起使用。”我不认为它使用我的表单用户名/密码。我如何告诉它明确使用我在表单中输入的用户名/密码(哪些是广告凭证)? – russds 2013-04-22 21:54:14