Azure自动化账户Python Runbook因TLS版本过低登录SQL失败
解决Azure自动化Python Runbook连接SQL Server的TLS版本错误
问题原因
Azure SQL Server默认要求客户端使用TLS 1.2及以上版本连接,而Azure自动化账户的Python运行环境可能未默认启用该版本TLS,导致连接时触发版本不匹配报错。
具体解决步骤
1. 强制Python环境使用TLS 1.2
在脚本开头添加代码,强制指定TLS协议版本,确保客户端使用符合要求的加密方式:
import ssl # 强制启用TLS 1.2 ssl.SSLContext.set_default(ssl.SSLContext(ssl.PROTOCOL_TLSv1_2))
2. 完善连接字符串的加密参数
修改连接字符串,明确指定加密相关参数,帮助驱动正确协商TLS版本:
import pyodbc server = 'servername.windows.net' database = 'DB' username = 'someuser' password = '**' driver= '{ODBC Driver 17 for SQL Server}' # 新增Encrypt和TrustServerCertificate参数 conn_str = f""" DRIVER={driver}; SERVER=tcp:{server}; PORT=1433; DATABASE={database}; UID={username}; PWD={password}; Encrypt=yes; TrustServerCertificate=no; """ with pyodbc.connect(conn_str) as conn: with conn.cursor() as cursor: cursor.execute("SELECT DB_NAME()") row = cursor.fetchall() print(row)
3. 验证自动化账户运行环境
- 确认Azure自动化账户使用的Python版本为3.8及以上,该版本对TLS 1.2支持更完善
- 检查自动化账户沙箱环境是否预装了ODBC Driver 17 for SQL Server,你的脚本已指定该驱动,此步骤仅做兼容性确认
额外注意事项
- 不要使用
{SQL Server}旧驱动,它不支持TLS 1.2,你的脚本已选用正确驱动,无需调整 - 若之前已能触发TLS报错,说明Azure SQL防火墙已允许自动化账户IP访问,此规则无需修改
内容的提问来源于stack exchange,提问作者Baxy
相关产品推荐
相关产品推荐

