【问题标题】:Azure Pipeline connect to SQL DB using service principalAzure Pipeline 使用服务主体连接到 SQL DB
【发布时间】:2020-06-22 20:23:22
【问题描述】:

在我的 azure 管道创建一个 azure sql db 后,我想执行一些 sql。

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

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

如果我愿意让脚本使用服务主体机密,那么我可以构造一个 OAuth 调用来检索不记名令牌并使用它来连接到数据库。

但是,由于 powershell 脚本是在服务主体的上下文中运行的,所以我有一种直觉,有一种更好的方法可以使用服务主体连接到数据库,而无需依赖密钥。

有什么想法可以做到这一点吗?

【问题讨论】:

    标签: azure-devops azure-sql-database service-principal


    【解决方案1】:

    解决方案是:

    我添加了一个检索不记名令牌的 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 任务中检索不记名令牌的脚本?谢谢
    • 感谢分享您的解决方案。你可以接受你的答案。
    【解决方案2】:

    您可以在 azure 管道的 azure powershell 任务中尝试以下脚本,以获取资源 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多