使用Kerberos委派的SSAS会收到连接超时错误

The*_*ies 6 sql-server ssas kerberos delegation asmx

我有一种情况,客户端连接到我的webservice(存在于另一台服务器上)必须访问SQL Server数据库和SSAS服务器.

它必须使用在访问SQL Server和SSAS多维数据集时调用服务的客户端的凭据.

为此,我这样做

var winId = HttpContext.Current.User.Identity as WindowsIdentity; var ctx = winId.Impersonate(); // Access Database/SSAS ctx.Undo();

在我的服务中,访问SQL Server数据库时工作正常.

但是,当我访问SSAS服务器时,我得到"连接超时或丢失"

有很多帖子,如 http://denglishbi.wordpress.com/2009/03/31/windows-server-2008-kerberos-bug-%E2%80%93-transport-connection-issues-with-ssas- data/ http://sqlblogcasts.com/blogs/drjohn/archive/2009/03/28/kerberos-kills-large-mdx-queries-on-windows-server-2008-ssas.aspx

在这方面,但我使用的是我的服务所在的Windows Server 2008 R2,所以这应该不是问题,因为这个错误应该由Microsoft修复.

任何关于如何最好地诊断这个问题的信息将不胜感激.

澄清SSAS服务器确实有SPN.这实际上是在一点上工作但现在已经停止了.没有重复的SPN或任何东西的迹象.

有趣的是,它在一台SSAS服务器上间歇工作,但似乎一直在为另一台服务器工作.它们都已经命名为本文档中提到的SPN

https://support.pyramidanalytics.com/entries/22056243-Configuring-Kerberos-Delegation-for-Named-Instances-of-SSAS-with-Active-Directory-and-additional-pro

Sla*_*des 1

我的生产环境是一个非常大的企业 Active Directory 网络上的负载平衡(并且负载很重)。下面进行了大量的测试,最终确定了有效的设置。

  • 我也在 Windows 2008 Server R2 上运行
  • 我的 Web 服务位于 IIS 中的 ASP.NET 中。对于身份验证,我启用了“Windows Auth”和“ASP.NET Impersonation”。内核模式已禁用,提供程序为“Negotiate:Kerboros”
  • SPNS 和可信委派是为 AD 帐户设置的。我的 AD 帐户看起来像 sys_myservice (sys_ 只是我公司的命名约定)
  • 应用程序池标识设置为使用 sys_myservice
  • 在开发环境中进行所有这些更改后,重新启动整个服务器。由于某些奇怪的原因,当我们引入新服务器并配置它们时,这总是必要的。

通过此设置,我的 Web 服务可以访问 SSAS、SQL Server 等使用 Windows Kerboros 身份验证的服务,并且所有查询都可以在用户的​​凭据下正确执行。

我的设置与您的设置的不同之处在于 ASP.NET 模拟是在 IIS 级别启用的。我在代码中进行模拟时遇到了麻烦,这正是您想要做的。如果您获得代码级模拟来配合您的工作流程,我将非常有兴趣看到您发布更新。

忘记说了。我的服务位于 MVC 应用程序中,我将全局过滤器应用于所有 Action 方法,以强制应用程序对所有连接进行身份验证。

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new System.Web.Mvc.AuthorizeAttribute());
    }
Run Code Online (Sandbox Code Playgroud)

在我的 web.config system.web 部分

<authentication mode="Windows" />
<identity impersonate="true" />
Run Code Online (Sandbox Code Playgroud)