无法使用服务主体类型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
相关产品推荐
相关产品推荐

