首页 文章

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

提问于
浏览
1

我正在尝试使用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 回答

  • 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/

  • 0

    请参阅official document .

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

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

    enter image description here

    有关这方面的更多信息,请参阅official document .

相关问题