Как установить пароль при автоматическом развертывании табличных служб SSAS?

Уважаемые гуру таблиц SSAS!

Мы настраиваем автоматизированный конвейер сборки / выпуска для табличной модели SQL Server Analysis Server (SSAS Tabular). Для этого мы используем Visual Studio Team Services (VSTS) и PowerShell. Он будет нацелен на 3 параллельные среды:

  • (localdb) \ ProjectsV13 ‹- рабочее пространство, интегрированное с SSAS
  • SQL-dev ‹- SSAS-dev
  • SQL-тест ‹- SSAS-тест
  • SQL-prod ‹- SSAS-продукт

Когда SSAS развернут, есть два метода олицетворения для подключения к исходным данным:

  • Определенная учетная запись Windows. (Специальная учетная запись для чтения данных.)
  • Сервисный аккаунт. (Процесс, запускающий службу SSAS.)

Рекомендуется указать учетную запись пользователя Windows и пароль для учетных данных олицетворения. Учетную запись пользователя Windows можно настроить на использование минимальных прав, необходимых для подключения к источнику данных и чтения данных из него. Выдача себя за другое лицо (SSASTabular)

Теперь мы пытаемся следовать рекомендуемой практике с учетной записью Windows. Независимо от того, выполняется ли развертывание с помощью Visual Studio (SSDT) ​​или мастера развертывания, пароль для учетной записи Windows вводится в отдельном всплывающем окне. Эти учетные данные хранятся непосредственно в памяти экземпляра SSAS, пока он не будет перезапущен или повторно развернут. Пароль (к счастью) никогда не записывается в сценариях развертывания. Теперь мы автоматизируем это с помощью PowerShell для замены специфичных для среды целей SQL / SSAS в файлах развертывания и развертываем с помощью утилита развертывания. Все работает, кроме:

Как программно установить пароли непосредственно на сервере после развертывания?

Мы можем вручную установить пароль через SSMS, но нам нужна автоматизация. Мы также обеспокоены тем, что возможный перезапуск сервера потребует ввода пароля вручную. Мы пробовали библиотеки Analysis Management Objects (AMO) и Tabular Object Model (TOM), но не нашли способ установить пароль.


person Martin Thøgersen    schedule 28.09.2017    source источник
comment
Вы имеете в виду, что вам нужно указать учетные данные вручную, если вы развертываете их с помощью PowerShell и утилиты развертывания?   -  person starian chen-MSFT    schedule 29.09.2017
comment
Нет, в оптимальном случае пароль хранится как секретная переменная в VSTS и передается автоматически во время / после развертывания.   -  person Martin Thøgersen    schedule 29.09.2017
comment
@ MartinThøgersen - ты так и не получил ответа? У меня та же проблема - установка строки подключения и идентификатора учетной записи олицетворения и пароля во время развертывания в задании Jenkins. У меня надежно хранятся учетные данные, но мне нужно понять, как развернуть базу данных asdatabase с этими учетными данными.   -  person Richard Schaefer    schedule 13.10.2017
comment
Если вы подключите экземпляр SSAS в Management Studio, вы увидите источник данных, определенный там. Вы можете щелкнуть правой кнопкой мыши и написать сценарий (изменить). У вас должна быть возможность отредактировать сценарий, включив в него любой требуемый пароль. Итак, в основном вам нужно добавить шаг сценария в конец вашего развертывания.   -  person Nick.McDermaid    schedule 27.06.2018


Ответы (1)


Я не использовал это раньше, так как все мои табличные модели олицетворяют учетную запись службы, что было плохим решением, которое я буду защищать из-за сложности автоматизации развертывания с выделенной учетной записью для чтения. С TOM наши развертывания стали намного лучше.

Я бы создал Закрепите строку на своем сборочном блоке, используя учетную запись сборки. Я использовал это сообщение в блоге, чтобы настроить безопасную строку, которую мои сценарии сборки TFS могут читать и расшифровать только с помощью учетной записи сборки на одном компьютере сборки. С защищенным паролем я бы использовал TOM для изменения источников данных для моделей и установки учетных данных.

В поле сборки, как пользователь сборки, сгенерируйте зашифрованную безопасную строку:

$secureString = ConvertTo-SecureString -String "MyPassword" -AsPlainText -Force
$encryptedSecureString = ConvertFrom-SecureString -SecureString $secureString
Write-Host $encryptedSecureString

Это даст вам длинную буквенно-цифровую строку, которую может расшифровать только тот же пользователь, который ее сгенерировал, на том же компьютере. Вы можете сохранить это в переменной TFS или жестко закодировать в своем скрипте. Если / когда ваши блоки сборки изменятся, вам нужно будет повторно сгенерировать защищенную строку и обновить везде, где вы ее храните.

В вашем сценарии сборки вы загружаете сборки TOM, читаете / десериализуете файл .bim, выполняете итерацию по источникам данных по мере необходимости и устанавливаете учетную запись и пароль, используя расшифрованную защищенную строку, и сериализуете | Установите-Content в свой BIM-файл, чтобы вы могли продолжать использовать свои сценарии сборки, вызывающие мастер.

$password = "01000000d08c9ddf0115d1118c7a00c04fc297eb01000000ce22fea7de22154fa3d76724ff4e4f5b0000000002000000000003660000c00000001000000066929eac2e7f09246011f85f6cffc6580000000004800000a000000010000000e724ec16b436fa822c65e731140aa2f318000000e2e93a7f5841d38030e8d8c7d4bbc51c7c0c9579eb9cd0e814000000a78a107dcdeec47b0992a5529a879f2b2c57ef7e"
Write-Host "Passed Password: $password"
$secureStringRecreated = ConvertTo-SecureString -String $password
$cred = New-Object System.Management.Automation.PSCredential('UserName', $secureStringRecreated)
$plainText = $cred.GetNetworkCredential().Password
Write-Host "SecureStringRecreated: $plainText"

$bimFilePath = 'C:\Source\SSAS_TabularModels\myModel\myModel.bim'
$modelBim = [IO.File]::ReadAllText($bimFilePath)
$db = [Microsoft.AnalysisServices.Tabular.JsonSerializer]::DeserializeDatabase($ModelBim)

foreach ($ds in $db.Model.Model.DataSources){
    $ds.ImpersonationMode = "ImpersonateAccount"
    $ds.Account = 'MyUserName'
    $ds.Password = $plainText
}

[Microsoft.AnalysisServices.Tabular.JsonSerializer]::SerializeDatabase($db) | Set-Content $bimFilePath
person Brandon McClure    schedule 09.07.2018