我正在尝试使用ADOMD连接到Azure Analysis服务,并使用服务主体进行身份验证。所以我做了以下事情:
以下是我连接Azure Analysis服务的代码。
var clientId = "******";
var clientSecret = "*****";
var domain = "****.onmicrosoft.com";
var ssasUrl = "northeurope.asazure.windows.net";
var token = await TokenHelper.GetAppOnlyAccessToken(domain, $"https://{ssasUrl}", clientId, clientSecret);
var connectionString = $"Provider=MSOLAP;Data Source=asazure://{ssasUrl}/{modelname};Initial Catalog= adventureworks;User ID=;Password={token};Persist Security Info=True;Impersonation Level=Impersonate";
var ssasConnection = new AdomdConnection(connectionString);
ssasConnection.Open();
var query = @"Evaluate TOPN(10,Customer,Customer[Customer Id],1)";
var cmd = new AdomdCommand(query)
{
Connection = ssasConnection
};
using (var reader = cmd.ExecuteXmlReader())
{
string value = reader.ReadOuterXml();
Console.WriteLine(value);
}
我能够获得有效的访问令牌,但在尝试打开连接时出现以下错误:
AdomdErrorResponseException:用户'app:xxxxxxx @ xxxxxx'无法访问'adventureworks'数据库,或者数据库不存在。
其他信息::
解决:
愚蠢的是我在发布之后就自己得到了解决方案。上面的第3点给了我一个线索。通过门户网站授予Azure分析服务的权限不会传播到服务主体(Azuire AD应用程序)的模型。
步骤:
将服务主体添加到具有权限的所需角色。服务主体以下列格式添加:
示例:app:8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F-72392615BB97
答案 0 :(得分:3)
愚蠢的是我在发布之后就自己得到了解决方案。上面的第3点给了我一个线索。通过门户网站授予对Azure分析服务的权限不会传播到服务主体(Azure AD应用程序)的模型。
步骤:
将服务主体添加到具有权限的所需角色。服务主体以下列格式添加:
示例:app:8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F-72392615BB97
我在这里写了我的整个经历:https://unnieayilliath.com/2017/11/12/connecting-to-azure-analysis-services-using-adomd/
答案 1 :(得分:0)
请参阅此official document。
您需要提供服务主体Owner
或Contributor
角色。
您可以在Azure门户上执行此操作。 <your subscription>--><Access Control>--><Add>
。
有关此问题的详情,请参阅此official document。