如何使用 Azure 批处理和数据工厂的 Azure Analysis Services 进行身份验证

How to authenticate with Azure Analysis Services from Azure batch and data factory

我有一个 c sharp class 库,它使用 AMO 库连接到 Azure Analysis Services。

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

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

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

还有其他方法可以使用 Azure 分析服务进行身份验证吗?

假设您可以在 Azure Active Directory 的上下文中注册服务主体,自定义 activity 代码可以使用该服务主体进行身份验证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 Functions 来执行此操作...

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

希望对您有所帮助。

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

查看自定义工作示例 activity 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 模型的权限