如何在C#中通过Microsoft Entra ID注册应用本地连接Azure SQL数据库?
Azure SQL 本地使用DefaultAzureCredential连接失败(Login failed for user '')解决建议
检查连接字符串配置
连接字符串里不能包含User ID、Password这类传统身份验证参数,否则会和AccessToken冲突,直接导致空用户登录失败。正确的连接字符串格式参考:Server=tcp:{你的服务器名}.database.windows.net,1433;Database={你的数据库名};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;确认数据库内的Entra ID用户配置
即便你的Entra ID账号是SQL Server的全局管理员,也必须在目标数据库内创建对应的外部用户才能访问数据:-- 替换为你的Entra ID账号(如user@domain.com)或应用注册ID CREATE USER [你的身份标识] FROM EXTERNAL PROVIDER; -- 按需分配读写权限,可根据业务调整角色 ALTER ROLE db_datareader ADD MEMBER [你的身份标识]; ALTER ROLE db_datawriter ADD MEMBER [你的身份标识];调整DefaultAzureCredential的本地验证策略
本地开发时,DefaultAzureCredential会自动尝试多种验证渠道,可能获取到的token对应的身份并非你预期的账号。可以指定仅使用特定验证方式,比如交互式登录:var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ExcludeInteractiveBrowserCredential = false, ExcludeEnvironmentCredential = true, // 不需要用local.settings.json的应用密钥时可关闭 ExcludeManagedIdentityCredential = true, ExcludeVisualStudioCredential = false });可以通过jwt.io解码token,查看
upn或appid字段,确认token对应的身份是你已配置权限的对象。验证SQL Server的Entra ID全局设置
登录Azure门户的SQL Server资源页面,进入「Azure Active Directory」选项卡,确认已启用Entra ID身份验证,且管理员配置正确。代码内新增token有效性验证
在获取token后添加简单输出,确认token本身有效:Console.WriteLine($"Token expires at: {token.ExpiresOn}");
内容的提问来源于stack exchange,提问作者EnenDaveyBoy
相关产品推荐
相关产品推荐

