我有一个简洁的类库,它使用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服务进行身份验证?
答案 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文档页面:
如果不是,您可能必须使用Azure功能来代替...
希望这有帮助。