Подключение к службе анализа Azure с использованием субъекта-службы не работает

Я пытаюсь подключиться к службам Azure Analysis с помощью ADOMD и прошел проверку подлинности с помощью субъекта-службы. Итак, я сделал следующее:

  1. Создать приложение в AAD.
  2. Предоставлено приложению (субъекту-службе) разрешение на чтение в службе анализа 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, либо база данных не существует.

Дополнительная информация::

  1. Я подтвердил, что разрешения (Читатель и также попробовал внести свой вклад) предоставляются субъекту службы для службы анализа Azure через портал Azure.
  2. Я пробовал тот же код с учетной записью службы (имя пользователя и пароль), и он работает.
  3. Если я удалю «Initial Catalog = adventureworks» из строки подключения, мое подключение будет успешным. Но я не понимаю, почему разрешение служб анализа не распространяется на модель.

Разрешение:

Глупо, что я сам получил разрешение сразу после того, как разместил это. Пункт № 3 выше дал мне ключ к разгадке: предоставление разрешения на службы анализа Azure через портал не распространяется на модель участников службы (приложения Azuire AD).

Шаги:

  1. Откройте службу анализа Azure на сервере Sql Mgmt Studio.
  2. В целевой модели перейдите в Роли.
  3. Добавьте субъекта-службы в требуемую роль с разрешением. Субъект службы добавляется в следующем формате:

    приложение: [appid] @ [tenantid]

пример: приложение: 8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F-72392615BB97


person Unnie    schedule 07.11.2017    source источник
comment
Согласно журналу ошибок, похоже, у вашего субъекта-службы нет разрешения на доступ к вашему sql. Вы должны дать это database roles. Если ему нужен доступ к другим ресурсам Azure, ему потребуется Owner или Contributor роль.   -  person Shui shengbao    schedule 08.11.2017


Ответы (2)


Глупо, что я сам получил разрешение сразу после того, как разместил это. Пункт № 3 выше дал мне ключ к разгадке: предоставление разрешений на службы анализа Azure через портал не распространяется на модель участников службы (приложения Azure AD).

Шаги:

  1. Откройте службу анализа Azure на сервере Sql Mgmt Studio.
  2. В целевой модели перейдите в Роли.
  3. Добавьте субъекта-службы в требуемую роль с разрешением. Субъект службы добавляется в следующем формате:

    приложение: [appid] @ [tenantid]

пример: приложение: 8249E22B-CFF9-440C-AF27-60064A5743CE @ 86F119BE-D703-49E2-8B5F-72392615BB97

Я опубликовал весь свой опыт здесь: https://unnieayilliath.com/2017/11/12/connecting-to-azure-analysis-services-using-adomd/

person Unnie    schedule 08.11.2017
comment
Замечательный друг, это был последний кусочек головоломки в моем путешествии открытий! stackoverflow.com/questions/48555021/ - person Nick.McDermaid; 04.02.2018
comment
@ Nick.McDermaid Рад, что это помогло! - person Unnie; 05.02.2018
comment
Я просто возвращаюсь к этому сейчас, но я пытаюсь предоставить учетной записи RunAs службы автоматизации Azure (которая, как мне кажется, является субъектом службы ???) доступ к SQL Azure. Когда я пытаюсь добавить app:<appid>@tenantid в группу окон из интерфейса командной строки, я получаю The URI 'app:d23.......@a16...' is not valid since it is not based on 'https://graph.windows.net/a16... - person Nick.McDermaid; 10.08.2018

См. Этот официальный документ.

Вы должны назначить субъекту службы роль Owner или Contributor.

Вы можете сделать это на портале Azure. <your subscription>--><Access Control>--><Add>.

введите здесь описание изображения

Дополнительную информацию об этом см. В этом официальный документ.

person Shui shengbao    schedule 08.11.2017
comment
Может быть, я должен сам опубликовать свое решение (которое я обновил в вопросе как раздел) в качестве ответа. Я решил это, открыв базу данных в SSMS и добавив принцип службы к роли читателя. Простое предоставление разрешения субъекту службы на портале Azure не работает. Спасибо за ваш ответ - person Unnie; 08.11.2017
comment
@Unnie Если вы хотите получить доступ только к SQL, вам нужна только роль базы данных. Если вам нужны другие ресурсы, вам понадобится owner роль. Надеюсь на эту помощь. - person Shui shengbao; 09.11.2017
comment
Для обработки куба вам обязательно нужно явно предоставить приложению доступ. - person Nick.McDermaid; 04.02.2018