我有一个生产服务器,我打电话给CONTOSO\MachineA
,运行SQL Server。 我有一个开发服务器,我打电话给CONTOSO\MachineB
,运行IIS。 这两个服务器都运行Windows Server 2008.我有一个域用户,我将打电话给CONTOSO\MyAppSvc
。 我有两个CNAMElogging, myapp => MachineA
和myappdev => MachineB
。
我的目标是让(intranet)客户端连接到MachineB
上的IIS并通过Windows身份validation进行身份validation,然后让应用程序模拟它们并以MachineA
身份连接到SQL。
MachineB正在运行SQL Server的另一个实例进行testing,并且通过运行SELECT * FROM [MachineA].[My App DB].App.SomeTable
validationSQL是否设置了正确的双跳validationSELECT * FROM [MachineA].[My App DB].App.SomeTable
via SSMS (on MyWorkstation) => SQL Server (on MachineB) => SQL Server (on Machine A)
。
MyApp
上IIS上的MyApp
使用模拟和Windows身份validation(仅协商)进行设置,并在运行MyAppPool
中运行。 system.webServer/ security/ authentication/ windowsAuthentication @useAppPoolCredentials
为true, @useKernelMode
为false。 MyAppSvc
和MyAppSvc
都被委托给无约束的委托。 MyAppSvc
上有两个SPN: HTTP/myapp
和HTTP/myapp.contoso.local
。
使用wireshark时,当我尝试浏览http://myapp/aPage
时,看到以下http://myapp/aPage
:
问题在于DNS条目是CNAMElogging而不是Alogging,而事实上SPN是为主机名称MyApp
而不是机器名称MachineB
。 解决方法是将MyApp
的DNS条目更改为直接指向MachineB
IP地址的Alogging,或者添加SPN HTTP/MachineB
和HTTP/MachineB.Contoso.local
(旧的可能会被删除)。