Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ASP.NET模拟场景。IIS 8.5到SQL 2012,需要设置什么SPN?_Sql Server_Impersonation_Iis 8.5_Spn - Fatal编程技术网

Sql server ASP.NET模拟场景。IIS 8.5到SQL 2012,需要设置什么SPN?

Sql server ASP.NET模拟场景。IIS 8.5到SQL 2012,需要设置什么SPN?,sql-server,impersonation,iis-8.5,spn,Sql Server,Impersonation,Iis 8.5,Spn,我读过许多博客,以及许多关于如何让我的IIS服务器将经过身份验证的用户传递给SQL的文章。然而,我被困在我需要设置SPN的确切位置上。这是我的设置 IIS:应用程序池.Net v4.0集成管道线标识=网络服务 身份验证: ASP.NET模拟=真(已启用) 已启用Windows身份验证 提供者=协商:Kerberos 已禁用内核模式身份验证 IIS服务器: 信任任何服务的委派(仅限kerberos) SQL SERVER: 信任任何服务的委派(仅限kerberos) 根据我对这些设置的理解,我应

我读过许多博客,以及许多关于如何让我的IIS服务器将经过身份验证的用户传递给SQL的文章。然而,我被困在我需要设置SPN的确切位置上。这是我的设置

IIS:
应用程序池.Net v4.0
集成管道线
标识=网络服务

身份验证:
ASP.NET模拟=真(已启用)
已启用Windows身份验证
提供者=协商:Kerberos
已禁用内核模式身份验证

IIS服务器:
信任任何服务的委派(仅限kerberos)

SQL SERVER:
信任任何服务的委派(仅限kerberos)

根据我对这些设置的理解,我应该将当前登录的windows帐户传递到IIS服务器,并且应该将该令牌传递给SQL以对我进行身份验证。但是,它只是不断地提示我从站点获取用户/通行证。

我发现这篇文章告诉我需要在“机器”上设置SPN,如下所示:

setspn -A HTTP/[dns name of the site] [machine name]
我不确定我需要什么样的SPN。有人能帮我吗?我在想这有点像

setspn -A HTTP/mywebserver.mydomain.com mywebserver

或者在我的应用程序池中使用设置了SPN的域帐户会更好吗?

好的ol'Kerberos。除非有更多的解释,否则我不会把这个答案复杂化。我将根据您的问题假设,我们讨论的是一台服务器,我还将假设它是域连接的。因此,我将为我的清单定义以下内容:

  • 让服务器的NetBIOS名称为websvr1
  • 让服务器的FQDN(完全限定域名)为websvr1.domain.com
  • 当然,我们假设我们在domain.com上
  • 让SQL Server的NetBIOS名称为sql1
  • 让SQL server的FQDN为sql1.domain.com
  • 让SQL Server服务用户为DOMAIN\sqlusr
  • 我假设默认的SQL Server端口为1433
话虽如此,再加上考虑到您问题中已经陈述的内容,我将尝试以下设置:

第一跳设置(SPN)

  • 注册以下SPN
  • setspn-S HTTP/websvr1.domain.com websvr1$
  • setspn-S HTTP/websvr1 websvr1$
第一跳设置(身份验证)

  • 请在提供程序中包括协商和NTLM,以便允许回退机制
  • 注意:确保协商在供应商列表中位于NTLM的顶部
  • 您不需要禁用内核模式身份验证。老实说,我不知道为什么这么多人禁用内核模式身份验证。即使对于作为域帐户运行的应用程序池,也可以使用useAppPoolCredentials=“true”属性允许内核模式身份验证成功解密使用域帐户加密的Kerberos票证
  • 其余的设置都很好
第二跳设置(SPN)

  • 为确保涵盖所有可能的组合,设置以下SPN:
  • setspn-S MSSQLSvc/sql1.domain.com domain\sqlusr
  • setspn-S MSSQLSvc/sql1.domain.com:1433 domain\sqlusr
  • setspn-S MSSQLSvc/sql1域\sqlusr
  • setspn-S MSSQLSvc/sql1:1433域\sqlusr
第二跳设置(IIS委派)

现在IIS和SQL SPN都已设置,您应该能够设置约束委派,以允许IIS代表当前登录的用户请求MSSQLSvc服务票证

  • 在域\WebVR1计算机帐户的AD委派选项卡中,选择“仅信任此计算机委派给指定服务”选项
  • 只使用Kerberos
  • 从列表中选择MSSQLSvc\sql1和MSSQLSvc\sql1.domain.com并添加这些服务
上面的设置被认为是受约束的Kerberos委托,它比无约束的委托更安全。据我所知,这应该包括在内

注意

我选择使用setspn-S,因为它可以确保我不会意外地设置重复的SPN并破坏Kerberos身份验证。从上面的示例中,请用服务器名称、FQDN和帐户替换它们各自的实际值

注意(再次)

对于Web服务器SPN,如果出于某种原因,我们请求的URL主机只是一个自定义DNS条目(顺便说一句,请确保它是a记录而不是CNAME),那么您需要注册所述DNS条目)


希望以上信息能有所帮助。

作为更新,我正在调查windows防火墙是否会导致此问题。有人知道默认设置的防火墙是否会阻止Windows身份验证吗?