我正在尝试从基于 Linux Arm 的服务器连接到位于 Windows Server 计算机中的远程 SQL Server 数据库,我使用 Python 作为编程语言和 SQLAlchemy,这是我用来获取连接的代码:
import urllib
from sqlalchemy import create_engine
import os
from dotenv import load_dotenv
from sqlalchemy.orm import sessionmaker
load_dotenv()
class Database:
server = str(os.getenv('DB_HOST')) + "," + str(os.getenv('DB_PORT'))
database = os.getenv('DB_DATABASE')
username = os.getenv('DB_USER')
password = os.getenv('DB_PASSWORD')
params = ('DRIVER={ODBC Driver 18 For SQL Server};SERVER=' + server + ';DATABASE=' + str(database) +
';UID=' + username + ';PWD=' + password+";Encrypt=no;TrustServerCertificate=yes")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params, pool_size=10, max_overflow=20)
def connection(self):
db = sessionmaker(bind=self.engine)
conn = db()
return conn
所有的数据认证数据都在.env文件中
当我尝试连接到服务器时,我收到以下响应:
sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('08001', '[08001] [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:0A000102:SSL routines::unsupported protocol] (-1) (SQLDriverConnect)') (Background on this error at: https://sqlalche.me/e/20/e3q8)
我尝试安装 SQL Server 的 ODBC 驱动程序 17,但 Arm Linux 操作系统不支持它,我不知道该怎么办
您的 SQL Server 版本严重过时。正如版本信息所述,版本 11.0.2218.0 于 2012 六月发布(超过 12 年前);这是 2012 年第一个安全更新之一。例如旧版本不支持 TLS1.2,而您的客户端将尝试使用该版本; 2016 年 1 月添加了对 TLS 1.2 的支持。
您需要将您的实例更新到最新的SP、CU和安全补丁;这将解决您面临的错误。
然而,这并不是故事的结局。 2012 年是生命的终结,而且已经有几年了。因此,您还需要将实例升级到受支持的版本 (2022)。当您使用 Enterprise 时,这将是一次“远非便宜”的购买,但需要完成一些工作。 此外,在您三岁的时候,请找其他人负责使该服务保持最新状态;如果您的公司有能力负担 Enterprise 的费用,他们就有能力花钱请人来使您的服务器保持最新状态;
12 年没有安装任何更新是可耻的。