使用 AAD 身份验证调用 Sqlcmd

oli*_*oli 7 powershell azure-powershell azure-active-directory azure-sql-database azure-devops

在 Azure DevOps“发布管道”中,我提供 Azure 资源(包括 SQLServer 数据库)并尝试使用托管标识配置对数据库的访问。

在确保 DevOps 服务主体是定义为数据库服务器的 AAD 管理员的 AAD 组的成员后,我需要运行一些 SQL 来添加托管身份用户并更改角色。这是在 Azure Powershell 任务中使用Invoke-Sqlcmdcmdlet尝试的。

Invoke-Sqlcmd有两种口味,我不清楚我应该使用哪一种以及是否重要。到目前为止,我尝试的所有内容都未能通过 AAD 进行身份验证。

如何将我使用 AAD 身份验证的意图传达给Invoke-Sqlcmd

我需要先Connect-AzureAD吗?

如果我需要传递一个System.Management.Automation.PSCredential对象,鉴于我们正在处理服务主体(Azure DevOps 服务用户),我应该使用什么作为用户和密码?

bry*_*ook 9

要使用 AAD 进行身份验证,您需要以下内容:

  • Azure 服务主体
  • 服务主体是 Azure AD 管理员或分配给数据库的数据库
  • 使用此服务主体的 Azure DevOps 服务连接

在 Azure DevOps 管道中,使用使用此服务主体的 Azure PowerShell 任务。然后调用该Get-AzAccessToken函数来获取您可以使用的凭据。

- task: AzurePowerShell@5
  displayName: Azure DB Awesomeness
  inputs:
    azureSubscription: 'MyServiceConnection'
    azurePowerShellVersion: 'LatestVersion'
    scriptType: inlinescript
    script: |

        $token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

        Invoke-SqlCmd -ServerInstance "$(DatabaseServer)" `
                      -Database "$(Database)" `
                      -AccessToken "$token" `
                      -Query "<YOUR QUERY>"
Run Code Online (Sandbox Code Playgroud)

其工作原理是 AzurePowerShell@5 任务从服务连接获取服务主体凭据,然后调用Connect-Az. 该Get-AzAccessTokencmdlet 获取可以相应使用的服务主体的凭据。