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

Visual Studio中AD身份连接Azure SQL配置托管标识报错排查

排查方向及修复方案

按以下顺序排查即可解决问题:

  • 先核对访问令牌的受众声明
    给Azure SQL颁发的访问令牌,请求scope必须是https://database.windows.net/.default。如果你拿令牌时填错了scope(比如用了Azure管理接口、Key Vault的scope),就算令牌里的身份和你授权的账号完全一致,Azure SQL也会直接拒绝认证,返回匿名登录错误。
  • 排查连接字符串的配置冲突
    手动给SqlConnection赋值AccessToken属性时,连接字符串里绝对不能带任何内置认证相关的配置项,包括Authentication、User ID、Password、Integrated Security,这些配置会覆盖你手动传入的令牌,让连接走默认匿名认证流程。
    你可以把连接字符串补全必要的安全配置,参考如下:
    SqlConnectionStringBuilder builder = new Microsoft.Data.SqlClient.SqlConnectionStringBuilder();
    builder.DataSource = "你的SQL服务器地址.database.windows.net";
    builder.InitialCatalog = "目标数据库名";
    builder.Encrypt = true;
    builder.TrustServerCertificate = false;
    string connstring = builder.ConnectionString;
    
  • 核对数据库用户的创建上下文
    执行建用户、加角色权限的SQL时要满足两个前提:
    • 执行SQL的登录身份必须是Azure SQL服务器配置的AAD管理员,不能是SQL认证的系统管理员
    • SQL执行的上下文是你要访问的目标业务库,不是系统库master
      如果之前是在master库下建的用户,切到目标库重新跑一遍授权SQL就行。
  • 检查依赖包版本
    把Nuget包Microsoft.Data.SqlClient升级到2.0以上的稳定版,早期1.x版本存在手动传入AccessToken时的兼容bug,会导致令牌无法正确传给服务端,触发认证失败。

修复后可以在连接打开后执行SELECT SUSER_SNAME(),如果返回你授权的user@domain.com账号,就说明认证配置完全生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:01:04