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

Flask API中pyodbc连接SQL Server失败,独立脚本可正常运行

Flask中使用pyodbc连接SQL Server报Login Failed错误的解决办法

问题根源

你遇到的问题和Flask、pyodbc的兼容性无关,核心是运行身份的差异:

  • 独立脚本运行时,是用当前登录的Windows用户身份通过Trusted_Connection='yes'做Windows身份验证,该用户已被授权访问SQL Server,所以连接正常。
  • Flask作为WSGI应用运行时,是用服务器进程的系统身份(比如Windows服务账户、IIS应用池账户,格式为<domain>\<pc-name>$的计算机账户)尝试连接SQL Server,而这个账户没有被授予数据库登录权限,因此触发18456登录失败错误。

解决方案

1. 给服务器进程账户添加SQL Server权限

  • 打开SQL Server Management Studio,展开「安全性」→「登录名」,右键选择「新建登录名」
  • 在「登录名」输入框点击「搜索」,找到<domain>\<pc-name>$这个计算机账户并添加
  • 切换到「用户映射」标签,勾选目标数据库,分配db_datareader、db_datawriter等必要权限

2. 修改Flask运行的身份为有权限的用户

  • 如果是IIS部署:修改应用池的「标识」为拥有SQL Server访问权限的域账户或本地用户
  • 如果是开发环境命令行运行:确保启动Flask的命令行窗口是用有权限的用户打开的(开发环境一般不会出现此问题,多发生在部署为服务时)

3. 改用SQL Server身份验证

放弃Windows身份验证,使用SQL Server专属账号密码连接,修改连接字符串如下:

conn = pyodbc.connect(
    Driver='{ODBC Driver 17 for SQL Server}',
    Server='localhost',
    Database='<db_name>',
    UID='<sql_username>',
    PWD='<sql_password>'
)

注意:需先确保SQL Server已启用「混合身份验证模式」,且该SQL账号拥有目标数据库的访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:13:15