Skip to content

Commit 8bf1744

Browse files
Merge pull request #434 from microsoft/psl-pk-deployfailuremain
fix: Use converted secure string access token for Invoke-Sqlcmd authentication
2 parents f7adb02 + 0a82356 commit 8bf1744

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

infra/scripts/add_user_scripts/create-sql-user-and-role.ps1

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,12 @@ EXEC sp_addrolemember '$($DatabaseRole)', @username;
7373
Write-Output "`nSQL:`n$($sql)`n`n"
7474

7575
Connect-AzAccount -Identity -AccountId $ManagedIdentityClientId
76-
$token = (Get-AzAccessToken -ResourceUrl https://database.windows.net/).Token
77-
Invoke-SqlCmd -ServerInstance "$SqlServerName" -Database $SqlDatabaseName -AccessToken $token -Query $sql -ErrorAction 'Stop'
76+
$token = (Get-AzAccessToken -AsSecureString -ResourceUrl https://database.windows.net/).Token
77+
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($token)
78+
try {
79+
$plaintext = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
80+
Invoke-Sqlcmd -ServerInstance $SqlServerName -Database $SqlDatabaseName -AccessToken $plaintext -Query $sql -ErrorAction 'Stop'
81+
} finally {
82+
# The following line ensures that sensitive data is not left in memory.
83+
$plainText = [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
84+
}

0 commit comments

Comments
 (0)