You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用Azure AD专属认证后SQL部署任务失败的解决方案咨询

问题

我正在部署一台SQL Server,部署流水线使用SqlAzureDacpacDeployment@1任务部署数据库。根据安全建议,需要在SQL Server的Azure Active Directory设置菜单中开启“仅支持Azure Active Directory认证”。但开启后,由于我的流水线任务使用SqlUserName和SqlPassword进行认证,导致部署失败。请问该如何解决?是否需要创建一个通用的AAD用户登录,还是有更优的替代方案?

现有流水线代码

主YAML文件:

//parameters:

//trigger:
  
//variables: 
 
stages:
- stage: 
  jobs:
  - job: 
    workspace:
      clean: 
    pool:
      
    steps:
    
    - //tasks  
    
- template: templates\myTemplate.yaml
  parameters:
    //list of params

myTemplate文件:

parameters:

stages:
- stage: 
  variables:
  
  pool:
    name: 
  jobs:
  - deployment: Deploy Azure Infra
    displayName: Deploy Azure Infra
    pool:
      name: 
    environment: 
      name: 
    strategy:
      runOnce:
        deploy:
          steps:
            - download: current
              artifact: drop               
                           
  //job       

  - job: Deploy Database
    dependsOn: 
    displayName: 
    steps:
      - download: current
        artifact: databases

      - task: AzureCLI@2
        displayName: 'Disable'
        inputs:
          azureSubscription: ''
          scriptType: ps
          scriptLocation: inlineScript
          inlineScript: 'az sql server ad-only-auth disable --resource-group rg1 --name mySql'

      - task: SqlAzureDacpacDeployment@1
        displayName: 
        inputs:           

      - task: AzureCLI@2
        displayName: 'Enable'
        inputs:
          azureSubscription: ''
          scriptType: ps
          scriptLocation: inlineScript
          inlineScript: 'az sql server ad-only-auth enable --resource-group rg1 --name mySql'
解决方案

最优方案:使用Azure AD服务主体认证SqlAzureDacpacDeployment@1任务

无需临时禁用AD-only认证(现有方案存在安全风险:禁用期间数据库会暴露SQL账号登录的漏洞),直接通过Azure AD服务主体完成认证部署,步骤如下:

  1. 配置服务主体权限

    • 给流水线使用的Azure服务连接对应的服务主体,在SQL Server中分配所需权限:
      • 若需全库管理权限,可在Azure Portal的SQL Server -> 左侧菜单「Azure Active Directory」->「管理员」中,添加该服务主体作为AAD管理员;
      • 若仅需单库部署权限,可在目标数据库中创建关联服务主体的AAD用户,再分配db_owner或dbmanager级别的权限。
  2. 修改任务配置
    移除SqlUserName和SqlPassword参数,改用Azure AD服务主体认证模式,示例配置:

    - task: SqlAzureDacpacDeployment@1
      displayName: 'Deploy Dacpac via AAD Service Principal'
      inputs:
        azureSubscription: '你的Azure服务连接名称'
        AuthenticationType: 'AzureADServicePrincipal'
        ServerName: 'mySql.database.windows.net'
        DatabaseName: '目标数据库名'
        DacpacFile: '$(Pipeline.Workspace)/databases/你的dacpac文件路径'
    

    该模式会自动复用服务连接的身份完成认证,无需手动输入账号密码。

替代方案:创建专用AAD用户(适用于非服务主体场景)

如果无法使用服务主体,可创建专用AAD用户用于流水线部署:

  • 在Azure AD中创建专属用户(建议禁用MFA,仅用于流水线自动化操作);
  • 在SQL Server中为该用户创建登录,并分配部署所需的数据库权限;
  • 修改任务认证方式为AzureADPassword,用Azure DevOps加密变量存储用户密码,示例配置:
    - task: SqlAzureDacpacDeployment@1
      displayName: 'Deploy Dacpac with AAD User'
      inputs:
        AuthenticationType: 'AzureADPassword'
        ServerName: 'mySql.database.windows.net'
        DatabaseName: '目标数据库名'
        SqlUsername: 'aad-deploy-user@yourdomain.com'
        SqlPassword: '$(AADDeployUserPassword)'
        DacpacFile: '$(Pipeline.Workspace)/databases/你的dacpac文件路径'
    

不推荐现有临时禁用方案

现有流水线中先禁用再启用AD-only认证的做法存在安全间隙,部署过程中数据库会允许SQL账号登录,违反安全建议,建议替换为上述AAD认证方案。

内容的提问来源于stack exchange,提问作者Lucky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:15:30