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

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

为此我做

var winId = HttpContext.Current.User.Identity as WindowsIdentity;
var ctx = winId.Impersonate();
//访问数据库/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服务器上间歇工作,但似乎一直在另一台SSAS服务器上工作。
如本文档所述,它们都已命名SPN。

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

最佳答案

我的生产环境是非常大的公司Active Directory网络上的负载平衡(并且负载很重)。以下经过大量测试,最终确定了有效的设置。

  • 我也在Windows 2008 Server R2上运行
  • 我的Web服务在IIS的ASP.NET中。对于身份验证,我启用了“Windows身份验证”和“ASP.NET模拟”。内核模式被禁用,提供程序为“Negotiate:Kerboros”
  • SPNS和Trusted Delegation为AD帐户设置。我的AD帐户看起来像sys_myservice(sys_只是我公司的命名约定)
  • 应用程序池标识设置为使用sys_myservice
  • 在dev env中进行所有这些更改之后,重新启动整个服务器。出于某些奇怪的原因,当我们启动新服务器并对其进行配置时,这始终是必需的。

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

    我的设置与您的设置不同之处在于,在IIS级别启用了ASP.NET模拟。我在模仿代码时遇到了麻烦,这就是您要尝试做的事情。如果您可以使用代码级模拟功能来处理您的工作流程,那么我非常有兴趣看到您发布更新。

    忘了提。我的服务在MVC应用程序中,我将全局过滤器应用于所有Action方法,以强制应用程序对所有连接进行身份验证。
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new System.Web.Mvc.AuthorizeAttribute());
        }
    

    并在我的web.config system.web部分中
    <authentication mode="Windows" />
    <identity impersonate="true" />
    

    10-07 12:20