Другая причина, по которой я не слишком далеко зашёл с этой ссылкой, состоит в том, что в примере генерируются учетные данные из имени пользователя / пароля, и, конечно, я не знаю пароль участника службы runas и не хочу сохранять его как учетные данные - это побеждает цель, если учетная запись службы. Это как когда вы устанавливаете SQL Server и он использует виртуальные учетные записи - мне нужно знать пароль для виртуальной учетной записи, я просто должен иметь возможность назначать права для виртуальной учетной записи. (Я знаю, что это не лучшая практика для предварительной установки, но зачем генерировать принципала службы runas, если его просто отбрасывают?)

R

В итоге шаги:

Используйте правильный код (последний код в этом посте)Вручную добавьте свой идентификатор приложения в SSMS в качестве администратора сервера или администратора базы данных.

и затем вы можете обработать куб Azure Analysis Services из учетной записи Azure Automation без необходимости создания другой отдельной учетной записи службы

Актуальный вопрос:

Я пытаюсь обработать куб служб аналитики Azure с помощью принципала службы запуска Azure Automation. Это выполняется в учетной записи автоматизации Azure.

Этот код

#Get the existing AzureRunAsConnection connection
$Conn = Get-AutomationConnection -Name AzureRunAsConnection

# Login with service principal account
Login-AzureRMAccount 
    -ServicePrincipal 
    -Tenant $Conn.TenantID 
    -ApplicationId $Conn.ApplicationID 
    -CertificateThumbprint $Conn.CertificateThumbprint

# Process cube
Invoke-ProcessASDatabase -databasename "DB" -server "Server" -RefreshType "Full"

Результаты в

Ошибка аутентификации: идентификатор пользователя и пароль требуются, когда пользовательский интерфейс недоступен.

Насколько я понимаю, когда вы создаете учетную запись автоматизации Azure, она также создает учетную запись «RunAs», которая, в свою очередь, создает основную учетную запись службы. (Хотя доко кажется немного легким)

Я попытался найти эту основную учетную запись в Azure AD и добавить ее к администраторам SSAS на портале Azure, но не могу найти реальную учетную запись. На самом деле участники службы отображаются как учетные записи?

Приведенный ниже код работает нормально, но использует предварительно сохраненные учетные данные, но я не хочу управлять еще одной учетной записью.

# Purpose: Run a full process the SSAS cube
$AzureCred = Get-AutomationPSCredential -Name "MyCredential"

Add-AzureRmAccount -Credential $AzureCred | Out-Null
Invoke-ProcessASDatabase -databasename "MyDB" -server "MyServer" -RefreshType "Full" -Credential $AzureCred 
Обновление 1

Я также попытался вручную добавить их в область членства SSMS (после поиска руководств вУчетная запись RunAs область в учетной записи автоматизации):

app:applicationid@tenantid

obj:serviceprincipalobjectid@tenantid

и я получаю то же сообщение об ошибке.

Я также запустил скрипт с пользователем без прав администратора и получил

База данных "zzz" не существует на сервере.

Так что, казалось бы, моя проблемааутентификацияне авторизация. Другими словами, дело не в том, что у меня нет доступа, а в том, что я не могу войти в систему. Я думаю, основываясь на этой ошибке, что-credential не является обязательным при звонкеInvoke-ProcessAsDatabase против служб аналитики Azure

Также отмечу, что для-credential вариант, помощь говорит

Если учетные данные не указаны, предполагается, что используется учетная запись Windows по умолчанию для пользователя, выполняющего сценарий.

Учитывая, что службы аналитики Azure, по-видимому, могут использовать учетные данные SQL только при подключении к источнику данных (без учетных данных AD), я могу только предположить, что службы аналитики Azure не могут использовать какой-либо тип аутентификации Azure Ad для внутренних процессов.

Раздражает то, что об этом нигде не говорится.

Обновление 2

Поэтому я недостаточно внимательно прочитал ссылку. Код, который работает, в основном на сайте, опубликованном обоими ответчикамиВот, Для предварительной проверки подлинности на Azure Analysis Server необходимо использоватьAdd-AzureAnalysisServicesAccount (Связанный блог используетLogin-AzureAsAccount но я не мог заставить его работать и не мог найти документ). Вам нужно установить модуль powershell "Azure.AnalysisServices", чтобы использовать это.

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureAnalysisServicesAccount -RolloutEnvironment "australiasoutheast.asazure.windows.net" -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
Invoke-ProcessASDatabase -databasename "MYDB" -server "MyServerEndpoint" -RefreshType "Full"

Вы можете использовать учетную запись RunAs с этим, и впоследствии вам не нужно использовать-credential

Итак ... на самом деле это работает и входит в систему, не требуя отдельных учетных данных, но теперь у него нет доступа к базе данных. Вместо ошибки входа в систему я получаю

База данных "ZZZZ" не существует на сервере.

Мне кажется, что учетная запись RunAs имеет доступ к серверу, но не к базе данных, и я не могу найти ее, чтобы предоставить ей доступ.

Обновление 3:

Это более прямое руководство о том, как предоставить приложению доступ к модели, чтобы ее можно было построить:

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

Обратите внимание, что вы не можете добавить на портал Azure, поскольку он не найдет его. Добавьте его «вручную» в SSMS, и он будет работать, и он также появится на портале Azure в качестве администратора

Теперь все работает.

Обновление 4:

Это стало удобным местом для хранения моих открытий вокруг аутентификации через MSI

Хотя этот вопрос решен, я не хочу подключаться к SQL Azure из чего-то другого, используя безопасность MSI. Никакая строка соединения не поддерживает это - ни один из методов аутентификации в любой строке соединения не поддерживает аутентификацию MSI. Я нашел эту интересную ссылку, которая подразумевает васМожно создайте строку подключения, которая поддерживает аутентификацию как MSI:

https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi

Интересующий вас код:

az webapp config connection-string set 
--resource-group myResourceGroup 
--name <app name> 
--settings MyDbConnection='Server=tcp:<server_name>.database.windows.net,1433;Database=<db_name>;' 
--connection-string-type SQLAzure

Я не могу найти ссылку на параметр--connection-string-type, Но, похоже, вы просто полностью исключаете часть аутентификации.

Ответы на вопрос(2)

Ваш ответ на вопрос