使用Service主体的Azure分析服务连接不起作用

时间:2017-11-07 14:41:37

标签: azure azure-active-directory adomd.net azure-analysis-services

我正在尝试使用ADOMD连接到Azure Analysis服务,并使用服务主体进行身份验证。所以我做了以下事情:

  1. 在AAD中创建应用。
  2. 授予Azure Analysis服务的应用程序(服务主体)读取权限。
  3. 以下是我连接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'数据库,或者数据库不存在。

    其他信息:

    1. 我已经验证了通过Azure门户向Azure分析服务提供了权限(Reader&还尝试使用了贡献)。
    2. 我尝试过使用服务帐户(用户名和密码)的相同代码,但它确实有效。
    3. 如果我从连接字符串中删除“Initial Catalog = adventureworks”,那么我的连接将成功。但我不明白为什么Analysis服务权限不会传播到模型。
    4. 解决:

      愚蠢的是我在发布之后就自己得到了解决方案。上面的第3点给了我一个线索。通过门户网站授予Azure分析服务的权限不会传播到服务主体(Azuire AD应用程序)的模型。

      步骤:

      1. 在Sql server Mgmt Studio中打开Azure分析服务。
      2. 在目标模型中,转到角色
      3. 将服务主体添加到具有权限的所需角色。服务主体以下列格式添加:

        app:[appid] @ [tenantid]

      4. 示例:app:8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F-72392615BB97

2 个答案:

答案 0 :(得分:3)

愚蠢的是我在发布之后就自己得到了解决方案。上面的第3点给了我一个线索。通过门户网站授予对Azure分析服务的权限不会传播到服务主体(Azure AD应用程序)的模型。

步骤:

  1. 在Sql server Mgmt Studio中打开Azure分析服务。
  2. 在目标模型中,转到角色
  3. 将服务主体添加到具有权限的所需角色。服务主体以下列格式添加:

    app:[appid] @ [tenantid]

  4. 示例: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

您需要提供服务主体OwnerContributor角色。

您可以在Azure门户上执行此操作。 <your subscription>--><Access Control>--><Add>

enter image description here

有关此问题的详情,请参阅此official document