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管理员,修正你的配置:
- 修正
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 }
- 移除
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
相关产品推荐
相关产品推荐

