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

使用AD服务账号通过pyodbc连接本地SQL Server登录失败如何解决

问题根因

你使用的Authentication=ActiveDirectoryPassword是Azure SQL专属的认证参数,仅适配云版SQL Server的Azure AD身份体系,本地部署的SQL Server无法识别该参数,会直接忽略你传入的UID、PWD字段,因此会抛出空用户登录失败的报错。

同时本地SQL Server的Windows集成认证本身不支持在连接字符串中直接传入账号密码,只会读取当前运行进程的Windows身份信息,这也是你只有切换服务账号身份启动SSMS才能正常登录的核心原因。


解决方案

方案1:切换服务账号身份运行Python脚本(推荐)

该方案和SSMS登录逻辑完全一致,无需硬编码密码,安全性更高:

  • 打开PowerShell,执行如下命令用服务账号身份启动Python进程,按提示输入账号密码即可运行脚本:
    runas /user:DOMAIN\USERNAME "python C:\Conn_Sql\DA_CONNECT_SQL_TEST\__init__.py"
  • 修改Python代码的连接字符串,删除错误的认证参数,启用Windows集成认证即可:
import pyodbc 

server = 'FULLY_QUALIFIED_SERVER_NAME.xx.xxx.xxx,1433'
database = 'TargetDB'
# 无需手动传入账号密码,自动读取当前进程的登录身份
cnxn = 'DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';Trusted_Connection=yes;'
pyodbc.connect(cnxn)

方案2:脚本内实现身份模拟(适合自动化运行场景)

如果需要脚本无需人工干预自动运行,可以在代码内模拟域账号登录后再建立连接:

  • 先安装依赖库:pip install pywin32
  • 示例代码如下:
import pyodbc
import win32security
import win32con

def impersonate_user(domain, username, password):
    token = win32security.LogonUser(
        username,
        domain,
        password,
        win32con.LOGON32_LOGON_INTERACTIVE,
        win32con.LOGON32_PROVIDER_DEFAULT
    )
    win32security.ImpersonateLoggedOnUser(token)

# 填入AD账号信息
impersonate_user('DOMAIN', 'USERNAME', 'PASSWORD')

# 连接字符串同样使用Trusted_Connection即可
server = 'FULLY_QUALIFIED_SERVER_NAME.xx.xxx.xxx,1433'
database = 'TargetDB'
cnxn = 'DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';Trusted_Connection=yes;'
conn = pyodbc.connect(cnxn)

内容的提问来源于stack exchange,提问作者swheelersql

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:48:00