Я пытаюсь подключиться к службам Azure Analysis с помощью ADOMD и прошел проверку подлинности с помощью субъекта-службы. Итак, я сделал следующее:
- Создать приложение в AAD.
- Предоставлено приложению (субъекту-службе) разрешение на чтение в службе анализа Azure.
Ниже мой код для подключения к службе анализа Azure.
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, либо база данных не существует.
Дополнительная информация::
- Я подтвердил, что разрешения (Читатель и также попробовал внести свой вклад) предоставляются субъекту службы для службы анализа Azure через портал Azure.
- Я пробовал тот же код с учетной записью службы (имя пользователя и пароль), и он работает.
- Если я удалю «Initial Catalog = adventureworks» из строки подключения, мое подключение будет успешным. Но я не понимаю, почему разрешение служб анализа не распространяется на модель.
Разрешение:
Глупо, что я сам получил разрешение сразу после того, как разместил это. Пункт № 3 выше дал мне ключ к разгадке: предоставление разрешения на службы анализа Azure через портал не распространяется на модель участников службы (приложения Azuire AD).
Шаги:
- Откройте службу анализа Azure на сервере Sql Mgmt Studio.
- В целевой модели перейдите в Роли.
Добавьте субъекта-службы в требуемую роль с разрешением. Субъект службы добавляется в следующем формате:
приложение: [appid] @ [tenantid]
пример: приложение: 8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F-72392615BB97
database roles
. Если ему нужен доступ к другим ресурсам Azure, ему потребуетсяOwner
илиContributor
роль. - person Shui shengbao   schedule 08.11.2017