0

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

网络配置:

<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,到目前为止没有任何问题)。

提前致谢!

4

2 回答 2

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”进行身份验证。即使您使用“域\xxxx”格式也不行。你就是不能。

于 2013-04-22T21:24:49.327 回答
1

无法为活动目录 ID 传递用户名密码。它始终使用运行网站的应用程序池的 ID。

于 2013-04-22T23:04:37.043 回答