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

Terraform配置Azure SQL DB多AD管理员报错:参数不支持

问题分析与解决办法

核心问题1:Azure SQL AD管理员的服务限制

Azure SQL Server仅支持配置一个AD管理员,你试图通过for_each创建多个azurerm_sql_active_directory_administrator资源,这违反了Azure服务的限制,是导致错误的主要原因。

核心问题2:映射值格式错误

你的sql_db_login_name_map中,每个value包含多余的描述文字和空格(比如"object_id 123"、"object _id 345"),正确的object_id应该是Azure AD中用户/组/应用的纯对象ID字符串(类似"00000000-0000-0000-0000-000000000000"的格式),不能带任何额外文字或空格。

修正方案

如果需要给SQL Server添加多个AD权限账号,不要用管理员资源,而是通过以下两种方式实现:

  • 方案1:使用azurerm_role_assignment给用户分配SQL Server相关的Azure RBAC角色(比如SQL DB Contributor)
  • 方案2:在SQL DB中创建AD用户并分配数据库角色,可通过azurerm_sql_user资源实现

如果仅需设置单个AD管理员,修正你的配置:

  1. 修正sql_db_login_name_map为单个键值对,且object_id为正确格式:
# common_locals.tf
sql_db_login_name_map = {
  "123@gmail.com" = "00000000-0000-0000-0000-000000000000" # 替换为实际的Azure AD对象ID
}
  1. 移除for_each,直接配置单个管理员:
# main.tf
resource "azurerm_sql_active_directory_administrator" "Sql_ad_admin" {
  server_name         = azurerm_sql_server.sql-db-server.name
  resource_group_name = azurerm_resource_group.123_rg.name
  login               = "123@gmail.com"
  tenant_id           = data.azurerm_client_config.current.tenant_id
  object_id           = local.sql_db_login_name_map["123@gmail.com"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:50:25