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

使用Bicep部署SQL Server并配置Entra组管理员时遇参数错误

问题修复方案

核心问题分析

你遇到的Invalid value given for parameter Login/Password错误,根源在于:

  • 启用AzureADOnlyAuthentication时,SQL Server不允许同时配置SQL本地管理员(administratorLogin和administratorLoginPassword),你设置了空的administratorLogin直接触发参数校验失败;
  • azureADOnlyAuthentications资源的名称必须固定为Default,你留空的配置也是无效的;
  • 资源依赖顺序不合理,导致AD管理员配置未完成就启用唯一认证。

修复后的Bicep模板

param sqlServerName string
param location string
param sqlServerLoginName string
param sqlServerGroupObjectId string
param sqlDbName string
param sqlDbSku object

// 创建SQL Server,不配置本地管理员
resource sqlServer 'Microsoft.Sql/servers@2023-05-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    minimalTlsVersion: '1.2'
    version: '12.0'
  }
  identity:{
    type: 'SystemAssigned'
  }
}

// 单独配置Azure AD组管理员
resource sqlServerAdminResource 'Microsoft.Sql/servers/administrators@2023-05-01-preview' = {
  parent: sqlServer
  name: 'ActiveDirectory'
  properties: {
    administratorType: 'ActiveDirectory'
    principalType: 'Group'
    login: sqlServerLoginName
    sid: sqlServerGroupObjectId
    tenantId: subscription().tenantId
  }  
}

// 启用Azure AD唯一认证,名称必须为Default
resource sqlServerAzureAdOnly 'Microsoft.Sql/servers/azureADOnlyAuthentications@2023-05-01-preview' = {
  parent: sqlServer
  name: 'Default'
  properties: {
    azureADOnlyAuthentication: true
  }
  dependsOn: [sqlServerAdminResource]
}

// 创建数据库,依赖认证配置完成
resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
  parent: sqlServer
  name: sqlDbName
  location: location
  sku: sqlDbSku
  properties: {
    maxSizeBytes: 1073741824
  }
  dependsOn: [sqlServerAzureAdOnly]
}

关键修改说明

  1. 移除本地管理员配置:启用Azure AD唯一认证后,SQL本地管理员会被禁用,无需配置administratorLogin和administratorLoginPassword;
  2. 修正认证资源名称:azureADOnlyAuthentications资源的名称必须设为Default,不能留空;
  3. 调整依赖顺序:确保AD管理员配置完成后再启用唯一认证,数据库部署等认证生效后再执行。

Dacpac部署任务补充说明

使用servicePrincipal认证时,需确保:

  • 关联的服务主体拥有SQL Server参与者或SQL DB参与者权限;
  • 服务主体已被添加为目标数据库的用户(可通过Bicep自动配置,示例如下):
param servicePrincipalObjectId string
param servicePrincipalName string

// 给服务主体添加数据库用户
resource sqlDbUser 'Microsoft.Sql/servers/databases/users@2023-05-01-preview' = {
  parent: sqlServerDatabase
  name: 'sp-db-deploy-user'
  properties: {
    principalType: 'ServicePrincipal'
    sid: servicePrincipalObjectId
    login: servicePrincipalName
  }
}

// 授予db_owner权限用于部署
resource sqlDbUserRole 'Microsoft.Sql/servers/databases/roleMembers@2023-05-01-preview' = {
  parent: sqlServerDatabase
  name: 'db_owner/sp-db-deploy-user'
  properties: {
    memberName: 'sp-db-deploy-user'
  }
}

你的现有Dacpac任务配置本身没问题,只要服务主体权限到位即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:16:09