ASP.NET Windows身份验证连接到SQL Server

3

我似乎无法让SQL服务器识别我的凭据。

当我登录Asp.net时,它能认出我,但当我执行SQL命令时,我会收到一个登录失败的消息。

IIS服务器和SQL服务器位于不同的机器上。

有其他应用程序在IIS服务器上,它们能够验证到SQL服务器。我相信Active Directory设置是正确的。我正在调查我做错了什么。

我一定是漏掉了什么。

  • 我检查了IIS设置
  • Web配置文件被设置为模拟用户。

以下是相关信息。如果有人知道我错过了什么或者我做错了什么,我将不胜感激。

IIS设置:

  • “集成Windows身份验证”已选中
  • “启用匿名访问”未选中

Web Config

<authentication mode="Windows"/>
<identity impersonate="true"/>
<authorization>
   <deny users="?" />   
</authorization>

Page_Load代码:

Dim winId As IIdentity = HttpContext.Current.User.Identity
TextBoxMessage.Text = winId.Name + Environment.NewLine
Dim cnn As SqlClient.SqlConnection

Try
   Dim sql As String = "*****"

   cnn = New SqlClient.SqlConnection("Data Source=*****;Initial Catalog=****;Integrated Security=True")
   cnn.Open()

   Dim cmd As New SqlClient.SqlCommand(sql, cnn)
   cmd.ExecuteNonQuery()
   cnn.Close()

Catch ex As Exception
   TextBoxMessage.Text += ex.Message
   cnn.Close()
End Try

输出:

域名\用户名

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。

5个回答

2
这是关键 = IIS服务器和SQL服务器位于不同的机器上。您面临着经典的双跳问题。可以这样想:
- 您使用自己的凭据访问Web应用程序。 - 在这种情况下,IIS必须向SQL Server提供您所说的身份验证信息。 - IIS说:“你好,SQL Server,我正在传递Tony的Kerberos凭证,它们是合法的。” - SQL Server说:“嗯,IIS,我不确定我相信你,我需要证明你有权将这些凭证呈现给我。”
因此,一旦按照Remus所述启用委派,您的SQL Server将相信您的IIS服务器代表您提供的凭证。
在安全方面,在委派下,明智的做法是选择:
- 仅为指定服务信任此计算机 - 仅使用Kerberos - 然后在“此帐户可以呈现委派凭据的服务”下方,确保您明确设置仅需要的服务器/端口。


0

不,它们不在同一台服务器上,尽管在我的开发机器上一切都按预期工作。谢谢提供链接,我会去查看的。 - TonyAbell

0
长话短说:IIS服务器应该在Active Directory中勾选“受信任委派”的复选框。

0
您需要在应用程序池中设置凭据。 - 打开IIS - 选择应用程序池 - 输入名称,选择 .Net 框架版本并单击确定 - 选择新添加的应用程序池,然后单击“高级设置”。 - 在进程模型部分,单击标识 - 选择自定义帐户并输入 AD 用户名、密码、确认密码,然后单击确定 - 选择您的应用程序,在基本设置中选择刚创建的应用程序池。
希望这可以帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接