通过 keyvault 连接到 sql 服务器

connection to sql server via keyvault

我正在使用一个 powershell 脚本,我需要通过 keyvault 连接到 SSISDB 数据库但出现错误:

Exception calling "Open" with "0" argument(s): "Login failed for user ''."

这是我在代码中使用的连接字符串:

$env        = Get-AutomationVariable -Name 'Env'
$vaultName  = 'ab-'+$env.ToLower()+'-bi-keyvault'
$dataSource = 'ab'+$env.ToLower()+'dbserver01.database.windows.net'
Write-Output "vaultName: " $vaultName

$password = Get-AzKeyVaultSecret -VaultName $vaultName -Name 'DBPassword' 
$userName = Get-AzKeyVaultSecret -VaultName $vaultName -Name 'DBUsername' 
$passwordSecret = $password.SecretValueText    
$userNameSecret = $userName.SecretValueText


##########################################################

Write-Output "SSISDB"
Write-Output "JOB START"
# Create connection to Master DB
$database   = 'SSISDB'
Write-Output "Running job on " $database

$MasterDatabaseConnection = New-Object System.Data.SqlClient.SqlConnection
$MasterDatabaseConnection.ConnectionString = "Data Source=$dataSource;Initial Catalog=$database;Integrated Security=False;User ID=$userNameSecret ;Password=$passwordSecret ;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False"

如果我直接在代码中使用 userid/password 检查连接,它确实有效,但不适用于 keyvault。你知道我的代码有什么问题吗?

Get-AzKeyVaultSecret 默认情况下不 return 秘密对象的值。

根据 docs,您应该使用:

$passwordSecret = Get-AzKeyVaultSecret -VaultName $vaultName -Name 'DBPassword' -AsPlainText
$userNameSecret = Get-AzKeyVaultSecret -VaultName $vaultName -Name 'DBUsername' -AsPlainText

我不知道为什么 SecretValueText 不起作用。