如何使用pyodbc通过Windows身份验证/Azure AD MFA连接SQL Server
问题排查与解决方法
核心问题原因
你当前的连接串配置与Azure SQL的身份验证逻辑不匹配:你连接的是Azure SQL服务(域名后缀为database.windows.net),但连接串未明确指定Azure AD认证类型,导致ODBC驱动默认尝试使用Windows集成身份验证,和你实际的登录场景不符,最终触发认证失败报错。
对应场景解决方案
场景1:使用Azure AD密码验证(无需MFA交互,直接传入AD账号密码)
在连接串中添加Authentication=ActiveDirectoryPassword参数,UID填写完整的AD账号(如my.name@domain.com),示例代码如下:
import pyodbc conndev = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};' 'Server=server124.database.windows.net,1433;' 'Database=db345;' 'UID=my.name@domain.com;' 'PWD=你的账号密码;' 'Authentication=ActiveDirectoryPassword;')
场景2:使用Azure AD通用MFA交互验证(和SSMS的MFA登录逻辑一致,弹出登录框完成验证)
将Authentication参数设为ActiveDirectoryInteractive,仅需填写UID,无需传入PWD参数,运行时会自动弹出微软登录窗口供你完成MFA校验,示例代码如下:
import pyodbc conndev = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};' 'Server=server124.database.windows.net,1433;' 'Database=db345;' 'UID=my.name@domain.com;' 'Authentication=ActiveDirectoryInteractive;')
场景3:使用Windows集成身份验证(仅适用于当前Windows账号已加入关联Azure AD的域、且已登录域账号的场景)
将Trusted_Connection设为Yes,无需传入UID、PWD和Authentication参数,示例代码如下:
import pyodbc conndev = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};' 'Server=server124.database.windows.net,1433;' 'Database=db345;' 'Trusted_Connection=Yes;')
注意事项
- 请确保本地安装的ODBC Driver 17 for SQL Server为最新版本,旧版本对Azure AD认证的支持存在已知缺陷
- 使用MFA交互验证时,运行代码的环境需要具备图形界面,否则无法弹出登录窗口会触发报错
内容的提问来源于stack exchange,提问作者Kenny_I
相关产品推荐
相关产品推荐

