如何通过App Service系统托管标识连接Azure SQL数据库(AD集成认证)
解决Linux App Service系统托管标识连接Azure SQL的AD集成认证问题
针对你的场景,不需要在连接字符串中填写User ID,但需要调整认证参数并完成数据库层面的身份配置,以下是具体解决方案:
1. 修正连接字符串
将连接字符串中的Authentication="Active Directory Integrated"替换为Authentication="Active Directory Managed Identity",同时完全移除User ID参数,最终示例如下:
Server=tcp:foo.database.windows.net,1433;Initial Catalog=foo-db;Persist Security Info=False;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication="Active Directory Managed Identity";
原因:
Active Directory Integrated主要适配Windows域环境的账号认证,Linux环境下的托管标识需要使用Active Directory Managed Identity这个专属认证类型。
2. 完成数据库层面的用户配置
虽然你已给托管标识分配了SQL DB Contributor角色,仍需在目标数据库内创建对应外部用户并授予操作权限:
- 使用具有数据库管理员权限的账号登录Azure SQL,执行以下SQL:
CREATE USER [你的App Service实例名称] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [你的App Service实例名称]; ALTER ROLE db_datawriter ADD MEMBER [你的App Service实例名称]; -- 可根据业务需求添加db_owner等其他权限角色
系统分配的托管标识名称与你的App Service实例名称完全一致,直接填写即可。
3. 排查常见验证点
- 确认App Service的系统分配托管标识处于启用状态(状态为
On) - 检查VNet集成配置,确保App Service能正常访问SQL Server的1433端口
- 验证数据库驱动版本:建议使用最新版的ODBC或.NET驱动,旧版本可能不支持Linux环境下的托管标识认证
内容的提问来源于stack exchange,提问作者w.brian
相关产品推荐
相关产品推荐

