【问题标题】:Can't connect to remote SQL Servers outside of network with PYODBC无法使用 PYODBC 连接到网络外的远程 SQL Server
【发布时间】:2014-09-11 08:20:07
【问题描述】:

由于某种原因,我似乎无法连接到我们网络之外的任何 SQL Server,但如果我通过 VPN 在网络内,则没有问题。我的代码是用于本地连接的:

sql = pyodbc.connect(
    'DRIVER={FreeTDS};'
    'SERVER=192.168.1.xx\ROA;'
    'DATABASE=RentalDB;'
    'UID=xxxxxxx;'
    'PWD=xxxxxxx'
)

以下是我正在尝试的远程操作:

sql = pyodbc.connect(
    'DRIVER={FreeTDS};'
    'SERVER=69.178.xx.xx/ROA;'
    'DATABASE=RentalDB;'
    'UID=xxxxxxxx;'
    'PWD=xxxxxxxx'
)

在尝试连接时,大约 15 秒左右后出现以下错误:

pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]无法 连接到数据源 (0) (SQLDriverConnect)')

我能够通过 SQL Server Management Studio 成功连接,并且我们有一个 C# 开发人员在建立连接方面没有问题,但由于某种原因,我不能。我正在运行 Python 2.7、Debian 7、FreeTDS 0.91 和 PYODBC 3.0.7。我认为 SQL Server 版本是 2012。有什么想法吗?

编辑:在远程连接上,我尝试了以下 'SERVER=' 字符串:

69.178.xx.xx/ROA
69.178.xx.xx\ROA
mssql://69.178.xx.xx/ROA
mssql://69.178.xx.xx\ROA
69.178.xx.xx:1433/ROA
69.178.xx.xx:1433\ROA
mssql://69.178.xx.xx:1433/ROA
mssql://69.178.xx.xx:1433\ROA

它们都返回相同的错误。

编辑 2:修复了上述内容的端口号。

【问题讨论】:

  • 1) 请确认您使用的是实际服务器 IP 而不是 69.178.xx.xx。 2) 默认的ms-sql 端口是1433 而不是1443, 3) 请确认您是否在运行非标准端口。 4) 确认 ROAMBA 是正确的服务器实例名称。 5) 确认您实际上可以连接到服务器端口——即没有防火墙问题 telnet 69.178.xx.xx 1433 不应给出类似于 Connecting To 69.178.xx.xx...Could not open connection to the host 的消息,在端口 1433 上:如果是这样,您将被阻止。
  • @GaryWalker 哎呀,1443 只是我在这里输入一次,然后复制并粘贴其余部分。我实际上使用的是 1433。服务器 ip 是正确的,我可以远程登录到它,似乎没有任何防火墙问题。 ROAMBA 是正确的服务器实例名称,在本地连接字符串上使用时运行良好。
  • 好的,您遇到了最常见的问题。检查以确保您的服务器允许远程连接搜索“启用远程连接 sql2008”等。您不识别 sql server 版本,请添加。确保您的服务器配置为允许非 Windows 身份验证搜索“更改 sql server 身份验证模式”您想要的混合模式。
  • 另外,尝试通过 sql 命令行工具进行连接。例如。 sqlcmd -s localhost -U sa -P 密码——可能是应用程序问题。如果这可行,则问题可能是您的应用程序没有使用您认为的连接字符串,或者您需要在 sql server 上将您的应用程序列入白名单
  • 如果您已将命名实例端口号更改为 1433(通常用于默认实例),请尝试在连接字符串中省略实例名称并单独指定 IP 地址。

标签: python sql sql-server pyodbc freetds


【解决方案1】:

我终于找到了答案(在尝试排除连接到托管在 Azure 上的 SQL Server 时偶然发现的问题)。 PYODBC 连接字符串,如果连接到 SQL Server 所在的网络之外,则需要一个端口号,而不是像其他 SQL 包使用的那样假定默认值。只需将'PORT=1433;' 添加到连接字符串即可使连接正常工作。 PYODBC 似乎对何时使用并且不想使用默认端口进行连接很挑剔。

【讨论】:

  • 帮我解决了,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
相关资源
最近更新 更多