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

无法使用服务主体类型AD管理员账户连接Azure SQL Server

问题描述

我通过Terraform创建了Azure SQL Server,并为其分配了一个服务主体作为AD管理员,Terraform配置如下:

resource "azurerm_mssql_server" "server" {
  name                         = "adauth-sqlserver"
  resource_group_name          = azurerm_resource_group.rg.name
  location                     = azurerm_resource_group.rg.location
  version                      = "12.0"
  administrator_login          = "faadmin"
  administrator_login_password = "faadmin-password"

  azuread_administrator {
    login_username = "SP-NCS-CREATED-FOR-DB"
    tenant_id = "12345fd6-1234-4871-a542-eb12a5a7800c"
    object_id = "d2db88ce-1234-1234-8d93-b256be13bd27"
  }
  public_network_access_enabled = true
  azure_ad_authentication_only = false
}

该管理员为服务主体,我已在Azure门户及通过Azure CLI查询确认其存在:

PS C:\SqlServerAADAuthenitcation> az sql server ad-admin list --resource-group databaseadauthRG --server-name adauth-sqlserver
[
  {
    "administratorType": "ActiveDirectory",
    "azureAdOnlyAuthentication": false,
    "id": "/subscriptions/1e27b63d-d44b-478e-afe9-08e5bf46eb7f/resourceGroups/databaseadauthRG/providers/Microsoft.Sql/servers/adauth-sqlserver/administrators/ActiveDirectory",
    "login": "SP-NCS-CREATED-FOR-DB",
    "name": "ActiveDirectory",
    "resourceGroup": "databaseadauthRG",
    "sid": "d2db88ce-1234-1234-8d93-b256be13bd27",
    "tenantId": "12345fd6-1234-4871-a542-eb12a5a7800c",
    "type": "Microsoft.Sql/servers"
  }
]

尝试使用“Active Directory Password”身份认证连接服务器时出现错误,另一次测试提示“Login failed for user token-identified principal”错误。请问应如何连接该AD管理员账户,以便添加更多Active Directory用户和组?我已多次查阅微软官方文档中关于创建映射到Azure AD标识的包含用户的内容。

解决方案

服务主体作为Azure SQL Server的AD管理员时,不能通过“Active Directory Password”方式直接登录——服务主体没有可用于密码认证的AD密码,必须使用基于令牌的认证方式连接。以下是具体操作步骤:

1. 获取服务主体的访问令牌

使用Azure CLI获取针对Azure SQL数据库的访问令牌:

az account get-access-token --resource https://database.windows.net/ --output tsv --query accessToken

执行后会返回一个长字符串格式的令牌,复制该令牌备用。

2. 使用数据库工具连接

方法一:Azure Data Studio

  • 打开Azure Data Studio,新建连接,选择Azure SQL类型
  • 在“身份验证类型”中选择Azure Active Directory - 令牌
  • 输入服务器名称、数据库名称(可填master),将复制的令牌粘贴到“令牌”字段,点击连接

方法二:SQL Server Management Studio (SSMS)

  • 打开SSMS,输入服务器名称,点击“选项”,在“连接属性”中指定数据库(如master)
  • 返回登录界面,身份验证选择Azure Active Directory - 令牌
  • 将复制的令牌粘贴到“密码”输入框,点击连接

3. 连接后添加AD用户/组

成功连接到服务器后,即可执行T-SQL语句创建映射到Azure AD标识的包含用户:

-- 创建AD用户
CREATE USER [AD用户名] FROM EXTERNAL PROVIDER;
-- 创建AD组
CREATE USER [AD组名] FROM EXTERNAL PROVIDER;

-- 为用户/组分配角色(示例:db_owner)
ALTER ROLE db_owner ADD MEMBER [AD用户名/组名];

关键注意事项

  • 确保当前Azure CLI会话已登录到对应租户的服务主体账户,可通过az login --service-principal -u <服务主体ID> -p <服务主体密钥/证书> --tenant <租户ID>切换登录
  • 令牌有效期为1小时,过期后需重新获取
  • 若连接时仍报错,检查服务主体的object_id和租户ID是否与SQL Server配置完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:53:37