如何从Azure批处理和数据工厂对Azure Analysis Services进行身份验证

时间:2017-05-23 11:36:16

标签: c# azure-data-factory azure-batch azure-analysis-services

我有一个简洁的类库,它使用AMO库连接到Azure Analysis Services。

我想将此作为我的数据工厂管道的一部分来刷新多维数据集分区。这是通过Azure批处理作为自定义.net活动完成的。

var server = new Server();
server.Connect("Provider=MSOLAP;Data Source=asazure://uksouth.asazure.windows.net/abcd;Initial Catalog=xyz");

在本地运行此工作正常,但这不会在云中运行。它目前出错,因为它没有在我的用户帐户下运行。我知道我可以在连接字符串中添加用户名和密码,但如果可能的话,我宁愿给它一些授权形式。

是否还有其他方法可以使用Azure Analysis服务进行身份验证?

2 个答案:

答案 0 :(得分:3)

现在可以使用服务帐户连接到AAS。

请参阅自定义活动here的工作示例。

来自它的连接部分可以简化为:

var authority = "https://login.windows.net/<tenant-id>";
var resource = "https://southcentralus.asazure.windows.net";
var appId = "***";
var appSecret = "***";

AuthenticationContext authContext = new AuthenticationContext(authority);
ClientCredential credentials = new ClientCredential(appId, appSecret);
var task = authContext.AcquireTokenAsync(resource, credentials);
task.Wait();
string token = task.Result.AccessToken;

var connectionStringTemplate = "Provider=MSOLAP;Data Source=asazure://southcentralus.asazure.windows.net/xxxxxx;Initial Catalog= xxx;User ID=;Password={0};Persist Security Info=True;Impersonation Level=Impersonate";
var connectionString = string.Format(CultureInfo.InvariantCulture, connectionStringTemplate, token);

var server = new Server();
server.Connect(connectionString);

您需要以app:<appId>@<tenantId>格式向您的服务帐户授予对AAS模型的访问权限。

答案 1 :(得分:2)

假设您可以在Azure Active Directory的上下文中注册服务主体,自定义活动代码可以使用该服务主体对SSAS进行身份验证。对于Azure Data Lake等其他服务来说,情况确实如此。

例如,使用如下方法创建凭证:

    private static ServiceClientCredentials AuthenticateAzure(string domainName, string clientID, string clientSecret)
    {
        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

        var clientCredential = new ClientCredential(clientID, clientSecret);
        return ApplicationTokenProvider.LoginSilentAsync(domainName, clientCredential).Result;
    }

查看有关服务认证服务的MS文档页面:

https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-authenticate-using-active-directory

如果不是,您可能必须使用Azure功能来代替...

https://azure.microsoft.com/en-gb/blog/automating-azure-analysis-services-processing-with-azure-functions/

希望这有帮助。