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

Azure Function通过用户分配托管身份连接Azure VM上的SQL Server时Azure AD身份验证语句不支持的问题

Azure Function通过用户分配托管身份连接Azure VM上的SQL Server时Azure AD身份验证语句不支持的问题

你碰到的这个情况完全是当前Azure VM托管SQL Server的一个明确限制——用于Azure AD身份验证的CREATE USER/CREATE LOGIN [your-managed-identity] FROM EXTERNAL PROVIDER语法,仅在Azure SQL数据库和Azure SQL托管实例中生效,并不适用于部署在Azure VM上的SQL Server。

这背后的原因是Azure VM上的SQL Server和Azure SQL系列服务(Azure SQL DB/MI)的Azure AD集成逻辑不同:Azure SQL是完全托管的平台服务,和Azure AD的集成深度更高,原生支持通过外部提供者直接映射托管身份;而Azure VM上的SQL Server本质属于IaaS部署模式,更贴近传统本地SQL Server的架构,目前还没有支持这种直接创建身份映射的方式。

针对你的业务场景,这里提供几个可行的替代方案:

  • 使用SQL Server本地账户认证:如果业务允许,可以在Azure VM上的SQL Server中创建普通SQL登录名和用户,让Azure Function通过该账户的凭据连接数据库。不过这种方式需要手动维护凭据,安全性不如托管身份。
  • 借助Azure AD令牌实现连接:你可以让Azure Function通过用户分配的托管身份获取Azure AD访问令牌,再用这个令牌连接Azure VM上的SQL Server。具体操作步骤大致如下:
    1. 在Azure AD中创建一个安全组,将你的用户分配托管身份加入该组。
    2. 在Azure VM上的SQL Server中,执行CREATE LOGIN [Azure AD安全组名称] FROM WINDOWS语句创建登录名(Azure VM上的SQL Server的Azure AD认证支持通过Windows身份验证映射Azure AD组)。
    3. 在目标数据库中创建对应用户并分配权限:CREATE USER [Azure AD安全组名称] FOR LOGIN [Azure AD安全组名称],再按需授予数据库权限(比如GRANT SELECT ON [目标表名] TO [Azure AD安全组名称])。
    4. 在Azure Function中,通过托管身份获取针对SQL Server的访问令牌,使用该令牌建立数据库连接。

需要注意的是,采用Azure AD令牌连接时,要确保Azure VM上的SQL Server已经完成Azure AD身份验证的配置,同时VM的网络环境允许Azure Function访问SQL Server的默认端口1433。

备注:内容来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:23:13