Azure devops Azure管道使用服务主体连接到SQL DB

Azure devops Azure管道使用服务主体连接到SQL DB,azure-devops,azure-sql-database,service-principal,Azure Devops,Azure Sql Database,Service Principal,在我的azure管道创建了azure sql数据库之后,我想执行一些sql 有问题的sql必须由经过AAD身份验证的用户执行 管道的服务连接是数据库的AAD身份验证用户 如果我希望脚本使用服务主体机密,那么我可以构造一个OAuth调用来检索承载令牌,并使用它连接到数据库 但是,由于powershell脚本是在服务主体的上下文中运行的,我有一种直觉,即有一种更好的方法可以使用服务主体连接到db,而不依赖于秘密 有什么想法吗?您可以在azure管道的azure powershell任务中尝试以下脚本

在我的azure管道创建了azure sql数据库之后,我想执行一些sql

有问题的sql必须由经过AAD身份验证的用户执行

管道的服务连接是数据库的AAD身份验证用户

如果我希望脚本使用服务主体机密,那么我可以构造一个OAuth调用来检索承载令牌,并使用它连接到数据库

但是,由于powershell脚本是在服务主体的上下文中运行的,我有一种直觉,即有一种更好的方法可以使用服务主体连接到db,而不依赖于秘密


有什么想法吗?

您可以在azure管道的azure powershell任务中尝试以下脚本,以获取资源的accesstoken
https://database.windows.net/

$context = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext

$databaseAccessToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://database.windows.net/").AccessToken

$databaseAccessToken

解决方案包括:

我添加了一个Azure CLI任务,用于检索承载令牌。然后我将其传递给使用该令牌的Azure Powershell任务

$token= & az account get-access-token --resource=https://database.windows.net --query accessToken
Write-Host("##vso[task.setvariable variable=sqlToken]$token")

您能否共享在Azure CLI任务中检索承载令牌的脚本?感谢分享您的解决方案。你可以接受你的答案。