我正在构建一个涉及SQL Server Analysis Services数据库(SSAS MD)和API(均在同一域中)的解决方案。这两个位于单独的服务器上,我想将登录SSAS(使用Windows身份验证)的用户的凭据发送到此API。我要做的是开发了一个部署到SSAS Cube的C#程序集。程序集查询API如下:
var wc = new WebClient();
wc.Credentials = System.Net.CredentialCache.DefaultCredentials;
wc.Headers["Accept"] = "application/json;odata=nometadata";
System.IO.Stream response = wc.OpenRead(conn);
返回的数据显示在连接到OLAP Cube的报告工具中。 当客户端连接到OLAP多维数据集并运行此Assembly时,API返回错误(401)未经授权。现在,它在两种情况下都可以正常工作:
1)当用户访问存储多维数据集的服务器上的OLAP多维数据集时。因此,这意味着不能有任何客户端服务器远程连接到Cube。似乎凭证委派不起作用。
2)将Assembly添加到OLAP Cube时,可以设置其授权:
这里的目标是使用“使用当前用户的凭据”,但是如果我将其更改为“使用特定的Windows用户名和密码”并键入客户端的用户名和密码,则可以使用。显然,只有该用户才能获得Assembly的授权,并且不会出现单点登录
我尝试了以下操作:https://docs.microsoft.com/en-us/sql/analysis-services/instances/configure-analysis-services-for-kerberos-constrained-delegation?view=sql-server-2017,因为我为SSAS的服务帐户创建了SPN,并在SSAS服务器,客户端服务器和API服务器上启用了委派。有趣的是,在那些之后,当我使用SSPI = Kerberos连接到SSAS服务器上的SSAS时,我得到401未经授权,所以我想我可能做错了。我还尝试了使用模拟级别=代理(根据https://docs.microsoft.com/en-us/sql/analysis-services/instances/connection-string-properties-analysis-services?view=sql-server-2017)从客户端服务器连接到SSAS,但效果也不佳。
说实话,我迷迷糊糊了。我感觉好像错过了一个很小的设置,导致整个解决方案无法正常工作。你能帮我吗?