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

ActiveDirectoryIntegrated认证下SQLAlchemy报错,如何用Azure AD连接数据库

错误原因

触发报错的核心原因是参数配置冲突:ActiveDirectoryIntegrated 属于集成式Azure AD认证模式,设计逻辑为直接读取当前运行环境的已登录Azure AD身份凭证,不需要显式传递用户名、密码参数,同时传入这两个参数会触发ODBC驱动的校验规则直接抛出报错。

解决方案

根据实际认证场景二选一即可:

场景1:使用当前环境已登录的Azure AD身份(无需硬编码账号密码)

直接删除代码中的username和password参数即可,修改后代码如下:

import sqlalchemy

connexion_str = sqlalchemy.engine.URL.create(
    "mssql+pyodbc",
    host="our-db.database.windows.net:1433",
    database="db-name",
    query={
        "driver": "ODBC DRIVER 17 for SQL Server",
        "authentication": "ActiveDirectoryIntegrated",
    },
)
engine = sqlalchemy.create_engine(connexion_str)
engine.connect()

该方案适用场景:

  • 运行代码的设备已加入Azure AD域
  • 开发环境已经通过AZ CLI、Azure PowerShell等工具完成Azure账号登录

场景2:手动传入指定Azure AD账号密码进行认证

如果需要使用指定账号登录,将authentication参数值修改为ActiveDirectoryPassword即可,修改后代码如下:

import sqlalchemy

connexion_str = sqlalchemy.engine.URL.create(
    "mssql+pyodbc",
    username="user@our.host.com",
    password="password",
    host="our-db.database.windows.net:1433",
    database="db-name",
    query={
        "driver": "ODBC DRIVER 17 for SQL Server",
        "authentication": "ActiveDirectoryPassword",
    },
)
engine = sqlalchemy.create_engine(connexion_str)
engine.connect()

补充说明

如果使用的Azure AD账号开启了多因素认证(MFA),ActiveDirectoryPassword模式无法生效,可选择以下替代方案:

  • 将authentication参数值改为ActiveDirectoryInteractive,删除password参数,运行时会弹出交互登录窗口完成认证
  • 改用服务主体、Azure托管标识等免密认证方式,安全性更高

内容的提问来源于stack exchange,提问作者Be Chiller Too

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:36:05