如何在WSL2中通过Python以Windows身份验证连接远程MS SQL Server?
在WSL2中用Python+pyodbc通过Windows身份验证连接远程MS SQL Server的实现方法
方案一:Kerberos认证(适用于域环境)
这是实现Windows身份验证的标准方式,适配加入域的Windows账号:
- 在WSL的Ubuntu/Debian环境下安装Kerberos工具:
sudo apt-get update && sudo apt-get install krb5-user - 编辑
/etc/krb5.conf配置文件,替换为你的域信息:[libdefaults] default_realm = YOUR_DOMAIN.COM dns_lookup_kdc = true dns_lookup_realm = true [realms] YOUR_DOMAIN.COM = { kdc = dc.your_domain.com # 替换为你的域控制器地址 admin_server = dc.your_domain.com } - 获取Kerberos票据,输入你的Windows域账号密码:
kinit your_windows_domain_username@YOUR_DOMAIN.COM - 编写Python连接代码:
import pyodbc conn_str = ( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=your_sql_server_hostname_or_ip;" "DATABASE=target_db_name;" "Trusted_Connection=yes;" "Authentication=ActiveDirectoryIntegrated;" ) try: conn = pyodbc.connect(conn_str) print("连接成功") # 后续数据库操作 conn.close() except Exception as e: print(f"连接失败: {str(e)}")
方案二:本地Windows账号模拟(适用于非域环境)
如果SQL Server在同一局域网的Windows机器上,且使用本地Windows账号验证:
- 确保WSL2能访问SQL Server主机(可通过
ping测试,必要时在WSL的/etc/hosts添加主机名映射) - 安装ODBC驱动:
sudo apt-get install msodbcsql17 unixodbc-dev - 使用带本地账号的连接字符串:
注意:需确保SQL Server允许该本地账号访问目标数据库。import pyodbc conn_str = ( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=your_sql_server_hostname_or_ip;" "DATABASE=target_db_name;" "UID=.\your_local_windows_username;" # 前缀.表示本地账号 "PWD=your_local_windows_password;" ) try: conn = pyodbc.connect(conn_str) print("连接成功") conn.close() except Exception as e: print(f"连接失败: {str(e)}")
关键检查项
- 确认SQL Server已启用Windows身份验证模式(而非仅混合模式)
- 验证WSL2与SQL Server主机的网络连通性,确保1433端口(SQL Server默认端口)开放
- 使用匹配的ODBC驱动版本(推荐17或18,避免兼容性问题)
内容的提问来源于stack exchange,提问作者Lars Schellhas
相关产品推荐
相关产品推荐

