Sqlalchemy 连接SQL Server 登录失败
实验系统环境
Windows平台
Sqlalchemy 2.0.23
Python 3.10
SQL Server 2012
aioodbc 0.5.0
问题详情
sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('28000', '[28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]登录失败。该登录名来自不受信任的域,不能与 Windows 身份验证一起使用。 (18452) (SQLDriverConnect); [28000] [Microsoft][ODBC Driver 17 for SQL Server]无效的连接字符串属性 (0); [28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]登录失败。该登录名来自不受信任的域,不能与 Windows 身份验证一起使用。 (18452); [28000] [Microsoft][ODBC Driver 17 for SQL Server]无效的连接字符串属性 (0)')

官方写法
SQLAlchemy 2.0 文档中通过 aioodbc 驱动程序支持 Microsoft SQL Server 数据库。
注意:要求 SQLAlchemy版本V2.0.23+,否则会报错找不到插件
“Can't load plugin: sqlalchemy.dialects:aioodbc”
`from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine(
"mssql+aioodbc://scott:tiger@mssql2017:1433/test?"
"driver=ODBC+Driver+17+for+SQL+Server&TrustServerCertificate=yes"
)`
解决方案
1、环境依赖:
1)确认Sqlserver连接配置的ODBC驱动已安装
查看 控制面板\系统和安全\管理工具 ==>> 点击查看 ODBC数据源\驱动程序 ,验证是否有ODBC驱动:

通常系统默认自带名为SQL Server的驱动,所以按理说driver='SQL+Server'应该是OK的。但实际在使用中不行!!!所以还是需要安装ODBC启动。
如 “ODBC Driver 17 for SQL Server”或以后版本
如果没有,官方下载 Version 17 路径:https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver15 或以上版本
2、增加 “IntegratedSecurity=false”
示例如下:
`from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine(
"mssql+aioodbc://scott:tiger@mssql2017:1433/test?" "driver=ODBC+Driver+17+for+SQL+Server&TrustServerCertificate=yes&IntegratedSecurity=false"
)`
解释一下:
1)IntegratedSecurity
集成安全性为true时,意味着使用windows凭据对Server进行登录验证,它将自动与windows登录和密码一起被重写。因此,如果登录到另一个域控制器,那么它将失败。
当集成安全性为false时,Server将使用连接字符串中提供的Server登录名和密码。为此,Server实例必须将其身份验证模式配置为混合模式,即Server和Windows身份验证模式。
2)Trusted_Connection
可信任连接,一开始我设置的是Trusted_Connection=True,主要是使用本地数据库调试使用,设置Trusted_Connection=true,意味着将使用windows凭证验证用户,设不设密码都能访问。但这就涉及到一个安全问题了。所以交付一定要设置Trusted_Connection=false使用用户名和密码验证登陆,以防被别人"登录"、"注入语句"等。
通用写法
`
from sqlalchemy.ext.asyncio import create_async_engine
SQLALCHEMY_DATABASE_URL = (f"mssql+aioodbc://{SQLSERVER_USER}:{SQLSERVER_PASSWORD}@{SQLSERVER_HOST}:{SQLSERVER_PORT}/{SQLSERVER_DATABASE}?"
f"driver={SQLSERVER_DRIVER}&TrustServerCertificate=yes&IntegratedSecurity=false")
engine = create_async_engine(SQLALCHEMY_DATABASE_URL)
`
参考
1、https://docs.sqlalchemy.org.cn/en/20/dialects/mssql.html#module-sqlalchemy.dialects.mssql.aioodbc
2、https://cloud.tencent.com/developer/ask/sof/110044375
Sqlalchemy 连接SQL Server 登录失败的更多相关文章
- Sql Server登录失败问题
1.启动SQL Server 2008 Management Studio,会看到 2. 里面有一个 身份验证.这个 身份验证 的下拉列表里面有两个选项: Windows 身份验证 和 SQL Ser ...
- VS连接SQL Server 2008,并实现登录和注册功能
--------------------- 作者:Cambridge 来源:CSDN 原文:https://blog.csdn.net/cambridgeacm/article/details/797 ...
- 使用IP连接SQL SERVER或者配置为连接字符串失败
使用IP连接SQL SERVER或者配置为连接字符串失败 情景一:当在webconfig文件中使用 <add key="ConnectionString" value=& ...
- SQL Server登录 18456错误
1.以windows验证模式进入数据库管理器. 第二步:右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密码策略去掉. 第三步:点击状态选项卡:勾选授予和启用. ...
- C#连接SQL server数据库
C#连接SQL server数据库 创建一个Windows应用程序,在窗体中添加TextBox控件.Button控件.Label控件. private void button1_Click(objec ...
- Java连接Sql Server 2008的简单数据库应用
1.从微软官网下载JDBC驱动包 sqljdbc_4.0.2206.100_chs.exe,双击解压文件到指定目录,我的指定目录是: C:\Program Files\Microsoft JDBC D ...
- 栗染-Myeclispe连接SQL Server数据库
第一步,在SQL server方面 这里是以身份验证登录. 这里我是建了一个hw的数据库,其他没啥说的. 第二步,最主要的一部分 因为第一次连接SQL Server数据库,所以就不知道还有这一步.不然 ...
- 小议:部署SharePoint 2013时,无法连接SQL Server问题
最近在给学员培训时发现,个别学员在完毕SharePoint 2013部署时,无法连接SQL Server,两种报错情况,例如以下所看到的: :配置SharePointConnect to SQL Se ...
- python 使用pymssql连接sql server数据库
python 使用pymssql连接sql server数据库 #coding=utf-8 #!/usr/bin/env python#------------------------------ ...
- NetBeans连接SQL server数据库教程
不废话,直接开始 1.下载sqljdbc.jar 可以从微软中国官方网站下载 SQLJDBC微软中国 笔者提供一个网盘链接Sqljdbc.jar 4个压缩包视版本选择,SQL 2012 用sqljdb ...
随机推荐
- python教程1.2:变量+数据类型+运算符
一.变量 程序是从上到下依次逐⾏执⾏的,所以变量必须先定义,后调⽤, 否则会报错 变量定义规范 二.数据类型 1.数字类型 可⽤ type() ⽅法来查看数据类型 2.字符串 多引号 多引号什么作 ...
- resteasy和springmvc的区别
resteasy 是 jboss的一个开源java api for restful service(JSR 311,sun 2008年发布,最新GA版本是2.0, JAX-RS 2.0 (JSR-33 ...
- C语言中四舍五入问题总结
C语言中四舍五入问题的总结 在C语言中大部分情况下都是不需要四舍五入的. 除了一种情况:在使用输出函数 printf()限制浮点型输出的小数位个数 eg: printf("%0.2f&quo ...
- 虚拟机上k8s部署好的第二天用时总是出现的各种问题
open /run/flannel/subnet.env: no such file or directory open /run/flannel/subnet.env: no such file o ...
- 继承与ER图
会员是用户吗? 实体与集合 er图叫实体联系图.什么是实体?是现实中存在的事物个体,用户背后是实际存在的单个人. 对象->实体 类->实体的集合 er图描述的是实体间的联系 会员是真实存在 ...
- FFmpeg下载编译、代码结构以及编译系统
从这里开始,就要踏上学习FFmpeg的旅程了,使用的FFmpeg版本5.0.1 1.ubuntu下,如何下载并编译FFmpeg源码 打开FFmpeg官网 Download FFmpeg,我们可以通过g ...
- 行列式求值,从 $n!$ 优化到 $n^3$
前置知识 \(\sum\) 为累加符号,\(\prod\) 为累乘符号. 上三角矩阵指只有对角线及其右上方有数值其余都是 \(0\) 的矩阵. 如果一个矩阵的对角线全部为 \(1\) 那么这个矩阵为单 ...
- Understanding Swift’s value type thread safety - 代码分析(二)
示范代码 ` func testScenarioA2() throws { var store: Int = 100 DispatchQueue.concurrentPerform(iteration ...
- 我有点想用JDK17了
大家好呀,我是summo,JDK版本升级的非常快,现在已经到JDK20了.JDK版本虽多,但应用最广泛的还得是JDK8,正所谓"他发任他发,我用Java8". 其实我也不太想升级J ...
- 代码审计——基础(JAVAWEB)
JAVAWEB 目录 JAVAWEB Servlet技术 JavaWeb概述 Servelt与Servlet容器 Servlet概念 Tomcat Web程序结构 Servlet容器响应客户请求的过程 ...