使用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] }
关键修改说明
- 移除本地管理员配置:启用Azure AD唯一认证后,SQL本地管理员会被禁用,无需配置
administratorLogin和administratorLoginPassword; - 修正认证资源名称:
azureADOnlyAuthentications资源的名称必须设为Default,不能留空; - 调整依赖顺序:确保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
相关产品推荐
相关产品推荐

