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

本地应用通过服务账户访问Azure SQL的托管身份认证故障求助

解决方案:本地应用非交互式访问Azure SQL的身份认证问题

核心问题:本地运行的应用无法直接使用Azure托管身份(系统/用户托管),因为托管身份的令牌获取依赖Azure内部的元数据服务,本地环境不存在这个端点,所以会出现无法获取令牌的错误。以下是可行的解决路径:

一、改用Azure AD服务主体(非交互式登录标准方案)

这是本地应用非交互式访问Azure资源的常规方式:

  1. 在Azure AD中注册一个应用程序(服务主体),生成客户端密钥或证书。
  2. 在Azure SQL数据库中,为该服务主体创建对应的AD用户,并授予所需权限(比如db_datareader/db_datawriter):
    CREATE USER [你的服务主体名称] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [你的服务主体名称];
    ALTER ROLE db_datawriter ADD MEMBER [你的服务主体名称];
    
  3. 修改连接字符串,使用Active Directory Service Principal认证方式:
    string clientId = "你的服务主体客户端ID";
    string clientSecret = "你的服务主体客户端密钥";
    string tenantId = "你的Azure租户ID";
    string ConnectionString = $@"Server=tcp:test-ad-sql-1.database.windows.net,1433;Initial Catalog=test-db-1;Persist Security Info=False;User ID={clientId};Password={clientSecret};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=Active Directory Service Principal";
    
    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();
        // 执行数据库操作
    }
    

二、若需使用托管身份,需将应用部署至Azure资源

托管身份仅能在Azure内部运行的资源中使用(比如VM、App Service、Function App等):

  1. 将你的应用部署到Azure资源上,为该资源分配已创建的用户托管身份。
  2. 在Azure SQL数据库中,为该托管身份创建用户并授权:
    CREATE USER [你的用户托管身份名称] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [你的用户托管身份名称];
    
  3. 使用Active Directory Managed Identity认证方式的连接字符串,若为用户托管身份,需指定User ID为托管身份的客户端ID:
    string managedIdentityClientId = "你的用户托管身份客户端ID";
    string ConnectionString = $@"Server=tcp:test-ad-sql-1.database.windows.net,1433;Initial Catalog=test-db-1;Persist Security Info=False;User ID={managedIdentityClientId};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=Active Directory Managed Identity";
    
    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();
    }
    

三、本地开发临时调试方案(使用Azure CLI凭证)

如果只是本地调试,可以通过Azure CLI预先登录服务主体,让应用自动复用CLI的凭证:

  1. 在本地安装Azure CLI,执行以下命令登录服务主体:
    az login --service-principal -u <服务主体客户端ID> -p <客户端密钥> --tenant <租户ID>
    
  2. 保持原有的Authentication=Active Directory Default连接字符串配置,此时应用会自动使用Azure CLI中的凭证完成认证。

额外排查点

  • 确认Azure SQL实例已启用Azure AD认证,且你的服务主体/托管身份已被正确授权访问目标数据库。
  • 检查连接字符串中的User ID参数:使用服务主体时填客户端ID;使用用户托管身份时填托管身份的客户端ID,而非主体ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:57:33