python - [SqlAlchemy][mssql][tls1.2] 如何使用 Windows 中的 pyodbc 为连接到 MS SQL Server 的 SqlAlchemy 强制实施 TLS 1.2?
问题描述
最近的强化标准使我们禁用了 TLS 1.0 和 1.1。
TLS 1.0 和 1.1 的注册表设置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client
现在下面的代码:
from sqlalchemy import create_engine
db = create_engine(
"mssql+pyodbc://__OUR_SERVER_NAME__/__OUR_DATABSE_NAME__?driver=SQL+Server+Native+Client+11.0&Trusted_Connection=yes&Encrypt=yes&TrustServerCertificate=Yes&ssl=True",
connect_args={
# 'sslmode': 'require', # did not work
# 'tls-version': 'tls1.2', # did not work
# 'ssl': True, # did not work
},
echo=True,
)
with db.begin() as conn:
conn.execute("SELECT TOP 5 * FROM sys.tables")
将抛出此异常db.begin()
:
有关详细信息,请参阅 SQL Server 联机丛书。(-2146893007)')
TLS 1.2 已启用,并且可以与同一客户端服务器上的 Azure Data Studio 一起正常工作。
甚至 python 显示 openssl 版本是合理的:
import ssl
print(f'SSL Version = {ssl.OPENSSL_VERSION}')
输出:
SSL Version = OpenSSL 1.1.1d 10 Sep 2019
蟒蛇版本:
python --version
Python 3.7.6
我试过看,SSLContext
但似乎找不到如何使它与SqlAlchemy一起工作。
任何帮助将不胜感激!!!
可能重复的问题(信息较少):Connecting to SQL Server using pyodc with TLS 1.2
解决方案
进一步调查显示 ODBC 驱动程序存在问题。
该应用程序位于 Windows Server 2012 上,带有 ODBC 版本:
SQL Server Native Client 11.0
版本:
2011.110.3000.00
日期:2012 年 10 月 20 日
ODBC Driver 17 for SQL Server
使用新的连接字符串更新驱动程序:
from sqlalchemy import create_engine
db = create_engine(
"mssql+pyodbc://__OUR_SERVER_NAME__/__OUR_DATABSE_NAME__?driver=ODBC+Driver+17+for+SQL+Server&Trusted_Connection=yes&Encrypt=yes&TrustServerCertificate=Yes&ssl=True",
connect_args={
# 'sslmode': 'require', # did not work
# 'tls-version': 'tls1.2', # did not work
# 'ssl': True, # did not work
},
echo=True,
)
推荐阅读
- django - django 频道不会断开连接
- bash - SHELL 在特定变量的开头和结尾添加双引号
- charts - 网格线仅在散点的数据点上
- excel - 尝试从网页中使用 vba 搜索地点的纬度和经度。单击vba的查找按钮不起作用
- objective-c - NSCFBoolean 和 NSNumber 发生了什么?
- python - 如何为 Pandas 小时/工作日图设置两级刻度?
- java - 序列化和静态变量
- c# - WPF将项目添加到BindingList不会更新Viewmodel中的另一个属性
- java - Java Swing 类对象
- android - 小米手环 3 配对和获取数据(心率、步数等)问题