如何在自动化SSA的表格部署期间设置密码



亲爱的ssas表格大师!

我们正在为SQL Server分析服务器表格模型(SSAS表格)设置自动构建/发行式PIPLINE。为此,我们使用Visual Studio团队服务(VSTS)和PowerShell。它将针对3个平行环境:

  • (localdb) projectsv13< - SSAS集成工作区
  • sql-dev< - ssas-dev
  • sql-test< - ssas-test
  • sql-prod< - ssas-prod

部署SSA时,有两种模拟方法用于连接到源数据:

  • 特定的Windows帐户。(特殊数据阅读器帐户。)
  • 服务帐户。(运行SSAS服务的过程。)

建议您指定Windows用户帐户和密码的模拟凭据。可以将Windows用户帐户配置为使用最小特权,以连接到数据源的数据并读取数据。模仿(ssastabular)

现在,我们尝试遵循Windows帐户的推荐练习。无论是通过Visual Studio(SSDT)部署还是部署向导,Windows帐户的密码都输入在单独的弹出框中。这些凭证直接存储在SSAS实例的内存中,直到重新启动或重新启动它为止。该密码(幸运的是)从未在部署脚本中编写。现在,我们使用PowerShell自动化此功能,以替换部署文件中特定环境的SQL/SSAS目标,并使用部署实用程序部署。除了:

外,一切都有效

我们如何直接在服务器发布后编程设置密码?

我们可以通过SSM手动设置密码,但是我们需要自动化。我们还担心可能的服务器启用将需要手动密码输入。我们尝试了库分析管理对象(AMO)表格对象模型(TOM),但找不到设置密码的方法。

我以前尚未将其用作我的所有表格模型,假冒服务帐户,这是一个糟糕的决定,我将根据使部署使用专用读取帐户自动化部署的困难来辩护。有了汤姆,我们的部署变得更好了。

我将使用构建帐户在构建框上创建一个安全的字符串。我已经使用了此博客文章来设置我的TFS构建脚本可以读取的安全字符串,并且只能在单个构建计算机上构建帐户解密。使用保证密码,我将使用Tom修改模型的数据源并设置凭据

在构建框上,作为构建用户,生成加密的安全字符串:

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

这将为您提供一个长的alpha数字字符串,该字符串只能由同一用户在同一台计算机上解密。您可以将其存储在TFS变量中,也可以将其用于脚本中。如果/当您的构建框更改时,您需要重新生成安全的字符串并在存储何处进行更新。

在您的构建脚本中,您加载了tom组件,读取/验证.bim文件,根据需要遍历数据源,并使用解密的安全字符串设置帐户和密码,然后序列化|对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:SourceSSAS_TabularModelsmyModelmyModel.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

最新更新