在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服务用户),我应该使用什么作为用户名和密码?
答案 0 :(得分:1)
要使用 AAD 进行身份验证,您需要具备以下条件:
在 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-Az
。 Get-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还不支持。