实验系统环境

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 登录失败的更多相关文章

  1. Sql Server登录失败问题

    1.启动SQL Server 2008 Management Studio,会看到 2. 里面有一个 身份验证.这个 身份验证 的下拉列表里面有两个选项: Windows 身份验证 和 SQL Ser ...

  2. VS连接SQL Server 2008,并实现登录和注册功能

    --------------------- 作者:Cambridge 来源:CSDN 原文:https://blog.csdn.net/cambridgeacm/article/details/797 ...

  3. 使用IP连接SQL SERVER或者配置为连接字符串失败

    使用IP连接SQL SERVER或者配置为连接字符串失败 情景一:当在webconfig文件中使用   <add key="ConnectionString" value=& ...

  4. SQL Server登录 18456错误

    1.以windows验证模式进入数据库管理器. 第二步:右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密码策略去掉. 第三步:点击状态选项卡:勾选授予和启用. ...

  5. C#连接SQL server数据库

    C#连接SQL server数据库 创建一个Windows应用程序,在窗体中添加TextBox控件.Button控件.Label控件. private void button1_Click(objec ...

  6. Java连接Sql Server 2008的简单数据库应用

    1.从微软官网下载JDBC驱动包 sqljdbc_4.0.2206.100_chs.exe,双击解压文件到指定目录,我的指定目录是: C:\Program Files\Microsoft JDBC D ...

  7. 栗染-Myeclispe连接SQL Server数据库

    第一步,在SQL server方面 这里是以身份验证登录. 这里我是建了一个hw的数据库,其他没啥说的. 第二步,最主要的一部分 因为第一次连接SQL Server数据库,所以就不知道还有这一步.不然 ...

  8. 小议:部署SharePoint 2013时,无法连接SQL Server问题

    最近在给学员培训时发现,个别学员在完毕SharePoint 2013部署时,无法连接SQL Server,两种报错情况,例如以下所看到的: :配置SharePointConnect to SQL Se ...

  9. python 使用pymssql连接sql server数据库

    python 使用pymssql连接sql server数据库   #coding=utf-8 #!/usr/bin/env python#------------------------------ ...

  10. NetBeans连接SQL server数据库教程

    不废话,直接开始 1.下载sqljdbc.jar 可以从微软中国官方网站下载 SQLJDBC微软中国 笔者提供一个网盘链接Sqljdbc.jar 4个压缩包视版本选择,SQL 2012 用sqljdb ...

随机推荐

  1. 09. rails 创建user用户列表

    gem添加分页的依赖 #列表分页 gem 'will_paginate', '~> 3.0.pre2' bundle 安装依赖 用户列表控制器 before_filter :auth_user, ...

  2. DNS(7) -- 智能DNS实现

    目录 1. 智能DNS 1.1 智能DNS概述 1.2 ACL控制列表 1.3 智能DNS实现 1.3.1 bind-view功能 1.3.2 智能DNS场景实现 1.3.3 生产场景配置示例 1. ...

  3. SQL Server 数据库分析操作程序时SQL语句等待或执行时间较长(死锁)

    大型程序,总会遇到程序操作端卡顿或者直接遇到死锁,死锁是数据库设计的缺陷,虽不能完全避免死锁的出现,但一旦出现死锁我们要进行及时分析死锁语句,找出原因,进行SQL语句或程序的优化,避免再次出现同样的问 ...

  4. Istio(四):创建部署Gateway并使用网关暴露服务

    目录 一.模块概览 二.系统环境 三.Gateway网关 3.1 使用 Gateway 四.实战:使用Gateway发布服务 4.1 创建部署并使用网关暴露 4.2 清理 一.模块概览 在Kubern ...

  5. Java中双括号初始化是个什么操作

    最近在阅读Mybatis源码的时候,看到了一种原来很少见到的语法: public class RichType { ... private List richList = new ArrayList( ...

  6. 『手撕Vue-CLI』获取下载目录

    开篇 在上一篇文章中,简单的对 Nue-CLI 的代码通过函数柯里化优化了一下,这一次来实现一个获取下载目录的功能. 背景 在 Nue-CLI 中,我现在实现的是 create 指令,这个指令本质就是 ...

  7. 一文了解JVM面试篇(上)

    Java内存区域 1.如何解释 Java 堆空间及 GC? 当通过 Java 命令启动 Java 进程的时候,会为它分配内存.内存的一部分用于创建 堆空间,当程序中创建对象的时候,就从对空间中分配内存 ...

  8. golang interface 和 struct 添加方法的区别

    在 Go 语言中,struct 和 interface 都可以关联方法,但它们的方式不同: 1. struct 添加方法: 结构体(struct)本身不直接包含方法,但可以通过定义一个指向该结构体类型 ...

  9. react 使用 error 报错

    在使用react 中报错原因总结 01 // Warning: Can't call setState on a component that is not yet mounted. This is ...

  10. Java代码忽略https证书:解决No subject alternative names present问题 HttpURLConnection https请求

    Java代码忽略https证书:解决No subject alternative names present问题 import org.slf4j.Logger; import org.slf4j.L ...