使用Bicep部署Azure SQL Server时ExternalAdministratorLoginName参数报错
Azure SQL Server Bicep部署重置AD管理员失败问题
问题场景
使用Bicep部署Azure SQL Server时,首次部署可成功配置AD管理员组,但通过Azure门户修改管理员组后,再次使用相同Bicep模板(通过参数传递组名和组ID)部署时失败。将login和sid替换为硬编码字符串则能正常部署。
用到的Bicep代码
resource sqlServerResource 'Microsoft.Sql/servers@2022-05-01-preview' = { name: sqlserverServerName location: location properties: { version: '12.0' administratorLogin: sqlserverAdminName administratorLoginPassword: sqlserverAdminPassword administrators: { administratorType: 'ActiveDirectory' principalType: 'Group' login: databaseAdminsGroupName sid: databaseAdminsGroupId tenantId: subscription().tenantId azureADOnlyAuthentication: false } } }
错误信息
Invalid value given for parameter ExternalAdministratorLoginName. Specify a valid parameter value
中文翻译:参数ExternalAdministratorLoginName的值无效,请指定有效的参数值
复现步骤
- 创建上述Bicep文件
- 执行PowerShell部署命令:
az deployment group create ` --name $resourceGroupName ` --resource-group $resourceGroupName ` --template-file test.bicep ` --parameters sqlserverServerName='issue20230912' ` location='westeurope' ` administratorLogin='SqlAdminLogin' ` administratorLoginPassword=$sqlserverAdminPassword ` databaseAdminsGroupId='xxxxx' ` databaseAdminsGroupName='xxxxx'
- 首次执行部署命令:成功
- 在Azure门户修改SQL Server的管理员组并保存:操作成功
- 再次执行上述部署命令:失败,触发上述错误
解决方案
1. 校验参数值的准确性
确认传递的databaseAdminsGroupName是Azure AD组的精确显示名称,无多余空格、特殊字符,大小写与Azure AD中完全一致——更新场景下ARM对参数格式的校验比创建场景更严格。
2. 改用唯一标识替代显示名称
相比显示名称,AD组的对象ID(即databaseAdminsGroupId)是全局唯一且无歧义的,可确保参数传递无格式问题;若组设置了用户主体名称(UPN),也可使用UPN作为login的值。
3. 添加强制更新标签
在Bicep资源中添加动态生成的强制更新标签,强制ARM模板重新处理管理员配置,绕过增量更新的校验逻辑:
resource sqlServerResource 'Microsoft.Sql/servers@2022-05-01-preview' = { name: sqlserverServerName location: location tags: { forceUpdate: utcNow() // 每次部署生成新时间戳,触发强制更新 } properties: { version: '12.0' administratorLogin: sqlserverAdminName administratorLoginPassword: sqlserverAdminPassword administrators: { administratorType: 'ActiveDirectory' principalType: 'Group' login: databaseAdminsGroupName sid: databaseAdminsGroupId tenantId: subscription().tenantId azureADOnlyAuthentication: false } } }
4. 先移除再重新配置管理员
若上述方法无效,可分两步部署:先通过Bicep将administrators设为null移除现有管理员,再重新配置目标组:
// 第一步:移除现有AD管理员 resource sqlServerResource 'Microsoft.Sql/servers@2022-05-01-preview' = { name: sqlserverServerName location: location properties: { version: '12.0' administratorLogin: sqlserverAdminName administratorLoginPassword: sqlserverAdminPassword administrators: null } }
部署完成后,再恢复原有管理员配置的Bicep代码重新部署。
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

