我正在尝试使用ADOMD连接到Azure Analysis服务并使用服务主体进行身份验证 . 所以我做了以下事情:
-
在AAD中创建应用程序 .
-
授予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: Either the user, 'app:xxxxxxx@xxxxxx', does not have access to the 'adventureworks' database, or the database does not exist.
Additional info: :
-
我已经通过Azure门户验证了服务主体到Azure分析服务的权限(Reader和尝试使用的贡献) .
-
我尝试过与服务帐户(用户名和密码)相同的代码,但它确实有效 .
-
如果我从连接字符串中删除"Initial Catalog= adventureworks",那么我的连接将成功 . 但我不明白为什么Analysis服务权限不会传播到模型 .
Resolution:
傻到我发布这篇文章后我自己得到了解决方案 . 上面的第3点给了我一个线索 . 通过门户网站授予Azure分析服务的权限不会传播到服务主体(Azuire AD应用程序)的模型 .
脚步:
-
在Sql server Mgmt Studio中打开Azure分析服务 .
-
在目标模型中,转到 Roles .
-
使用权限将服务主体添加到所需角色 . 服务主体以下列格式添加:
应用程式:[APPID] @ [tenantid]
示例:app:8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F-72392615BB97
2 回答
傻到我发布这篇文章后我自己得到了解决方案 . 上面的第3点给了我一个线索 . 通过门户对Azure分析服务的授予权限不会传播到服务主体(Azure AD应用程序)的模型 .
脚步:
在Sql server Mgmt Studio中打开Azure分析服务 .
在目标模型中,转到 Roles .
使用权限将服务主体添加到所需角色 . 服务主体以下列格式添加:
应用程式:[APPID] @ [tenantid]
示例:app:8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F-72392615BB97
我在这里写了我的整个经历:https://unnieayilliath.com/2017/11/12/connecting-to-azure-analysis-services-using-adomd/
请参阅official document .
您需要提供服务主体
Owner
或Contributor
角色 .您可以在Azure门户上执行此操作 .
<your subscription>--><Access Control>--><Add>
.有关这方面的更多信息,请参阅official document .