具有AAD身份验证的Invoke-Sqlcmd

时间:2019-04-11 16:24:26

标签: powershell azure-devops azure-active-directory azure-sql-database azure-powershell

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

在确保DevOps服务主体是数据库服务器的AAD管理员(定义为AAD管理员)的成员之后,我需要运行一些SQL以添加托管身份用户并更改角色。 使用Invoke-Sqlcmd cmdlet在Azure Powershell任务中尝试进行此操作。

Invoke-Sqlcmd有两种风格,对我来说我不知道​​应该使用哪种,以及是否重要。到目前为止,我尝试过的所有操作均未通过AAD身份验证。

如何向Invoke-Sqlcmd传达使用AAD身份验证的意图?

我需要先Connect-AzureAD吗?

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

4 个答案:

答案 0 :(得分:1)

要使用 AAD 进行身份验证,您需要具备以下条件:

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

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

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

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

        Invoke-SqlCmd -ServerInstance "$(DatabaseServer)" `
                      -Database "$(Database)" `
                      -AccessToken "$token" `
                      -Query "<YOUR QUERY>"

这样做的原因是 AzurePowerShell@5 任务从服务连接获取服务主体凭据,然后调用 Connect-AzGet-AzAccessToken cmdlet 获取可以相应使用的服务主体的凭据。

答案 1 :(得分:0)

油-理解。

尝试类似此示例的内容,只是调整您的需求...

Foo.foo

OP更新

那只是一个选择。如果您不希望弹出窗口,则可以创建一个安全文件并从中提取凭据,也可以将凭据存储在Windows凭据存储中,然后从那里获取。但是,您仍然必须先创建它们。

答案 2 :(得分:0)

如何创建AAD应用程序并提供证书作为其授权。将应用程序设置为可以访问数据库,然后将其用于

答案 3 :(得分:0)

我找不到用Invoke-SQLCmd来做到这一点的方法,但是我主要使用的Module DBATools在这里说明了一个非常简单的方法(示例8):https://docs.dbatools.io/#Connect-DbaInstance

我已经使用了一段时间了,并且连接没有问题,但是据我所知,MFA还不支持。